专栏名称: 安全祖师爷
国内领先的互联网安全媒体,WEB安全爱好者们交流与分享安全技术的最佳平台!这里聚集了XSS牛、SQL牛、提权牛、WEB牛、开发牛、运维牛,公众号定期分享安全教程及相关工具。与其在别处仰望 不如在这里并肩!
目录
相关文章推荐
Python爱好者社区  ·  付费上班终于成为了现实。 ·  14 小时前  
贵州日报  ·  这笔钱别忘了领!明起预约→ ·  昨天  
百姓关注  ·  70城房价1月数据出炉!贵阳的是…… ·  2 天前  
Python开发者  ·  AI 正在培养一代 “文盲程序员” ·  3 天前  
51好读  ›  专栏  ›  安全祖师爷

Shell 脚本速成

安全祖师爷  · 公众号  ·  · 2019-12-03 17:33

正文

0x00 前言

这段时间快速把 Micropoor 的内网课程看完了一遍,里面出现了很多 Shell 脚本。

Shell 脚本有什么好处?

  1. 无需安装其他软件

  2. 适合任务自动化,擅长系统管理任务

通过 Shell 编程,大大提高渗透效率。

0x01 第一个 shell 脚本

功能:启动 msfconsole

  1. vim start_msf.sh

  2. chmod +x start_msf.sh

  3. # 运行

  4. ./start_msf.sh

start_msf.sh 的具体内容:

  1. #!/bin/sh

  2. msfconsole

0x02 引入变量

功能:输出一个变量名

  1. touch test.sh

  2. chmod +x test.sh

  3. # 运行

  4. ./test.sh

test.sh 的具体内容:

  1. #!/bin/sh

  2. name='变量名'

  3. echo $name

注意: = 前后不能有空格,否则就会出现 ./test.sh: 2: name: not found 这个错误,也就是说变量定义会失败。

有时候变量名可能会和其它文字混淆,如下代码:

  1. #!/bin/sh

  2. num=2

  3. echo "this is the $numnd"

上述脚本并不会输出 this is the 2nd ,只会打印 this is the ;这是由于 shell 会去搜索变量 numnd 的值,而实际上这个变量此时并没有值。

修改方法:用花括号圈定变量名:

  1. #!/bin/sh

  2. # 这是一个注释

  3. num=2

  4. echo "this is the ${num}nd"

注意 shell 脚本的注释是 #

0x03 for 循环

for var in ….; do …. done

  1. #!/bin/sh

  2. for var in A B C; do

  3. echo "var is $var"

  4. done

注:sh 不支持 C 语言风格的 for 循环写法,所以下面的脚本一定要把 shell 指定为 bash 。参考:shell脚本:Syntax error: Bad for loop variable错误解决方法

  1. #!/bin/bash

  2. for ((var=0;var<=3;var++)); do

  3. echo "var is $var"

  4. done

上面的脚本更 shellish 的写法是:

  1. #!/bin/bash

  2. for var in `seq 3`; do

  3. echo "var is $var"

  4. done

注意通过上面通过两个「`」引入了命令,直接使用命令执行的结果。

0x04 while 循环

语法:

  1. while condition

  2. do

  3. command

  4. done

测试命令

可以使用 测试命令 来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…

通常用 [] 来表示条件测试,注意这里的空格很重要,要确保方括号前后的空格。

  • [ -f "somefile" ] :判断是否是一个文件

  • [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限

  • [ -n "$var" ] :判断 $var 变量是否有值

  • [ "$a" = "$b" ] :判断 $a $b 是否相等

示例代码:

  1. #!/bin/bash

  2. COUNTER=0

  3. while [ $COUNTER -lt 5 ]

  4. do

  5. COUNTER =$((COUNTER + 1))

  6. echo $COUNTER

  7. done

注意:

  1. [ 后和 ] 前要空格。参考:“[0: command not found” in Bash [duplicate]

  2. lt 即为 less than ,小于。

0x05 if 语句

语法:

  1. if ....; then

  2. ....

  3. elif ....; then

  4. ....

  5. else

  6. ....

  7. fi

$SHELL 变量:

注意:上面的 SHELL 必须大写。变量 $SHELL 包含了登录 shell 的名称。

  1. #!/bin/sh

  2. if [ "$SHELL" = "/bin/bash" ]; then

  3. echo "bash"

  4. else

  5. echo "your login shell is $SHELL"

  6. fi

注:再次注意 [] 前后的空格问题。不然结果可能出错。

0x06 函数

函数的主要使用场景是代码复用。函数定义部分应该写在一个 Shell 脚本的开头。

  1. # 定义

  2. functionName()

  3. {

  4. body

  5. }

  6. # 调用

  7. functionName

无返回值函数:

  1. #!/bin/bash


  2. firstFunction(){

  3. echo "1 try!"

  4. }

  5. firstFunction

有返回值函数:

注: read var 命令:提示用户输入,并将输入内容赋值给变量 var

  1. #!/bin/bash


  2. funWithReturn(){

  3. echo "这个函数会对输入的两个数字进行相加运算..."

  4. echo "输入第一个数字: "







请到「今天看啥」查看全文


推荐文章
Python爱好者社区  ·  付费上班终于成为了现实。
14 小时前
贵州日报  ·  这笔钱别忘了领!明起预约→
昨天
Python开发者  ·  AI 正在培养一代 “文盲程序员”
3 天前
中国好文章  ·  请您接福
8 年前
杂学杂问  ·  杂学杂问 2月17日早读分享
8 年前
中国物理学会期刊网  ·  量子之路:从量子隐形传态到光量子计算机
7 年前
译言  ·  宴会
7 年前