0x00 前言
这段时间快速把 Micropoor 的内网课程看完了一遍,里面出现了很多 Shell 脚本。
Shell 脚本有什么好处?
-
无需安装其他软件
-
适合任务自动化,擅长系统管理任务
通过 Shell 编程,大大提高渗透效率。
0x01 第一个 shell 脚本
功能:启动 msfconsole
vim start_msf.sh
chmod +x start_msf.sh
# 运行
./start_msf.sh
start_msf.sh 的具体内容:
#!/bin/sh
msfconsole
0x02 引入变量
功能:输出一个变量名
touch test.sh
chmod +x test.sh
# 运行
./test.sh
test.sh 的具体内容:
#!/bin/sh
name='变量名'
echo $name
注意:
=
前后不能有空格,否则就会出现
./test.sh: 2: name: not found
这个错误,也就是说变量定义会失败。
有时候变量名可能会和其它文字混淆,如下代码:
#!/bin/sh
num=2
echo "this is the $numnd"
上述脚本并不会输出
this is the 2nd
,只会打印
this is the
;这是由于 shell 会去搜索变量 numnd 的值,而实际上这个变量此时并没有值。
修改方法:用花括号圈定变量名:
#!/bin/sh
# 这是一个注释
num=2
echo "this is the ${num}nd"
注意 shell 脚本的注释是
#
。
0x03 for 循环
for var in ….; do …. done
#!/bin/sh
for var in A B C; do
echo
"var is $var"
done
注:sh 不支持 C 语言风格的 for 循环写法,所以下面的脚本一定要把 shell 指定为
bash
。参考:shell脚本:Syntax error: Bad for loop variable错误解决方法
#!/bin/bash
for ((var=0;var<=3;var++)); do
echo "var is $var"
done
上面的脚本更
shellish
的写法是:
#!/bin/bash
for var in `seq 3`; do
echo "var is $var"
done
注意通过上面通过两个「`」引入了命令,直接使用命令执行的结果。
0x04 while 循环
语法:
while condition
do
command
done
测试命令
:
可以使用
测试命令
来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
通常用
[]
来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。
-
[ -f "somefile" ]
:判断是否是一个文件
-
[ -x "/bin/ls" ]
:判断/bin/ls是否存在并有可执行权限
-
[ -n "$var" ]
:判断
$var
变量是否有值
-
[ "$a" = "$b" ]
:判断
$a
和
$b
是否相等
示例代码:
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 5 ]
do
COUNTER
=$((COUNTER + 1))
echo $COUNTER
done
注意:
-
[
后和
]
前要空格。参考:“[0: command not found” in Bash [duplicate]
-
lt
即为
less than
,小于。
0x05 if 语句
语法:
if ....; then
....
elif ....; then
....
else
....
fi
$SHELL 变量:
注意:上面的 SHELL 必须大写。变量 $SHELL 包含了登录 shell 的名称。
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "bash"
else
echo "your login shell is $SHELL"
fi
注:再次注意
[]
前后的空格问题。不然结果可能出错。
0x06 函数
函数的主要使用场景是代码复用。函数定义部分应该写在一个 Shell 脚本的开头。
# 定义
functionName()
{
body
}
# 调用
functionName
无返回值函数:
#!/bin/bash
firstFunction(){
echo "1 try!"
}
firstFunction
有返回值函数:
注:
read var
命令:提示用户输入,并将输入内容赋值给变量 var
#!/bin/bash
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "