Shell脚本控制语句

1.条件测试与捕获信号
在Shell脚本中,一般使用条件测试作为依据。
条件测试的内容包括:

  • 用户的输入
  • 某条命令执行完之后返回的状态
  • 变量值
  • 文件状态
  • 系统发送的信号

在Linux系统中,无论是命令、脚本还是程序执行完成后都存在退出状态,退出状态通常保存在预定义变量$?中。0表示成功,1表示失败(退出状态可以自定义,默认非0为失败)

在脚本中设置退出状态用exit(无论脚本执行到何处,遇到exit立即设置退出状态,然后退出脚本)

  • exit 0:表示返回脚本执行成功,没有错误返回
  • exit 1:表示执行失败,有错误返回

2.文件测试

  1. 文件基本测试:文件、目录是否存在、文件类型、文件长度等
  2. 文件权限测试:读取、写入、执行等

文件基本测试大多时候用在创建文件、目录之前,使得脚本容错性更高

文件基本测试常用命令和含义:

命令含义
d测试目标是否存在,并且是一个目录
f测试目标文件是否存在,并且是一个普通文件
L测试目标是否存在,并且是一个链接文件
b测试文件是否存在,并且是一个块设备文件
c测试目标文件是否存在,并且是一个字符设备文件
e测试指定文件或目录是否存在
[-command parameter] 

command为测试命令,parameter需要测试的目标文件和目录。
文件测试命令和测试参数都要放在中括号内

[ -d /etc/rc.local ]    //测试rc.local是否为一个目录

文件权限测试命令和含义

命令含义
w判断指定的文件是否存在,并且拥有可写入权限
r判断指定的文件是否存在,并且拥有可读取权限
x判断指定的文件是否存在,并且拥有可执行权限
u判断指定的文件是否具有SUID权限

对文件权限进行测试的时候,这些测试都是针对脚本的执行用户,并非测试的是文件属主的权限

3.变量测试

测试变量是否被定义需要使用命令z,这个命令的格式与文件测试命令一样,需要注意的是,用z命令测试时,没有被定义的变量将返回数字0。已定义的变量将返回数字1

4.字符串和数值测试
字符串测试的查找符:

操作符含义
=判断两个字符串是否相等,如果相等返回0
!=判断两个字符串是否不相等,如果不相等返回0
n判断字符串是否为空
[ parameter1 operator parameter2 ]

[ -n "$NAME"]  //测试字符串是否为空

数值测试:

操作符含义
eq如果两个数相等,返回真
ne如果两个数不相等,返回真
lt如果第1个数小于第2个数,返回真
le如果第1个数大于等于第2个数,返回真
gt如果第1个数大于第2个数,返回真
ge如果第1个数大于等于第2个数,返回真

判断两个属是否相等,也可使用字符串测试符号= != 进行测试

[ 300 -lt 200 ]  // 300是否小于200

5.逻辑操作符
逻辑操作符和含义:

操作符含义
a逻辑与,一假必假
o逻辑或,一真必真
!逻辑非,真假互换
[ -r /etc/passwd -a -w /etc/passwd ] //逻辑与操作符判断/etc/passwd是否可读、写

6.捕获系统信号
可捕获的信号:

信号含义
1(SIGHUP)来自控制终端的刮起或来自控制进程的死亡信号
2(SIGINT)来自键盘的中断信号
3(SIGQUIT)来自键盘的推出信号
15(SIGTERM)终止信号

如果无法确定要捕获的信号,可在重要的脚本中捕获所有可以捕获的信号

捕获信号后可采取的措施:

  • 不采取任何措施,由系统处理这些信号【这会导致脚本结束执行,暂停等】
  • 捕获并忽略信号【捕获后不采取任何操作】
  • 捕获信号并采取操作【通常操作是提示用户是否需要中断脚本的执行,也可以向用户发出脚本正在执行不能退出的消息】
trap "command" signals

command表示捕获到信号后需要执行的命令或函数,如果为空(”“)表示胡烈信号
signals表示要捕获的信号列表,可以使用数字表示,捕获多个信号使用空格

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值