ekwong.cn

尔康的博客

0%

Shell脚本编写

Shell 脚本基础

Shell脚本一般用 .sh 作为后缀

例如我们编写一个 exmple.sh

1
2
3
4
5
#!/bin/bash
# example shell script
ls
pwd
free -m

Shell脚本一般会分为三种元素:

第一行是脚本声明,告知系统使用哪种Shell解析器来执行该脚本;

第二行的注视用于描述脚本功能和备注;

第三行开始,才是脚本程序的内容部分。

接收用户参数

使用Shell脚本语句时,需要输入的参数可以直接在脚本命令后输入,以空格分开,例如

1
./example.sh arg1 arg2 arg3 ...

在脚本内部,可以使用美元符号💲+数字来接收参数相关内容,例如:

  • $0 可以获取当前脚本的名称
  • $# 可以获取当前脚本的参数个数
  • $* 可以获取当前脚本的所有参数
  • $数字 可以获取当前脚本的某个具体参数(从1开始),例如$1获取脚本输入的第一个参数,而$3获取脚本输入的第三个参数
  • $? 是显示最后命令的退出状态,0表示没有错误,其它表示有错误

判断条件

在Shell脚本语句中,条件判断式的写法如下:

1
if [ 条件测试语句 ]

注意,测试语句的左右两边各有一个空格

按照测试的对象来分,测试语句可以分为四种:

  • 文件测试语句;
  • 逻辑测试语句;
  • 整数值比较语句;
  • 字符串比较语句;
文件测试

文件测试是指判断文件是否存在、文件的类型和文件的权限等情况,常用的参数如下:

参数 作用
-d 判断文件是否为目录类型
-e 判断文件是否存在
-f 判断是否为一般文件类型
-r 判断当前用户是否有权读取
-w 判断当前用户是否有权写入
-x 判断当前用户是否有权执行
逻辑测试

在逻辑测试语句中,运算符如下:

  • “与”运算的符号是 &&
  • “或”运算的符号是 ||
  • “非”运算的符号是在运算逻辑前加 !
整数值比较

整数值运算只能是对数字进行操作,不能将数字与字符串、文件等进行比较。其运算符如下:

运算符 含义
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
字符串比较

用于测试字符串是否为空、判断两字符串是否相同。其运算符如下:

运算符 含义
= 比较字符串内容是否相同
!= 判断字符串内容是否不相同
-z 判断字符串内容是否为空

流程控制语句

if条件语句

结尾必须带 fi。

单分支判断逻辑写法如下:

1
2
3
4
if 条件判断
then
执行逻辑
if

双分支判断语句写法如下:

1
2
3
4
5
6
if 条件判断
then
执行逻辑1
else
执行逻辑2
fi

多分枝判断语句写法如下:

1
2
3
4
5
6
7
8
9
10
if 条件判断1
then
执行逻辑1
elif 条件判断2
then
执行逻辑2
...
else
执行逻辑n
fi
for循环语句

结尾必须带 done,写法如下:

1
2
3
4
for 变量名 in 变量集合
do
执行逻辑
done
while循环语句

结尾必须带done,可以用 exit 语句进行退出,写法如下:

1
2
3
4
while 条件判断
do
执行逻辑
done
case条件语句

结尾必须带 esac,写法如下:

1
2
3
4
5
6
7
8
9
10
11
case 变量值 in
模式1)
执行逻辑1
;;
模式2)
执行逻辑2
;;
...
*)
默认执行逻辑
esac