Shell脚本--结构化命令

if-then语句

格式如下:

if commad
then
    commands
fi

bash shell的if语句会运行if行定义的那个命令。如果该命令的退出状态码是0(该命令行成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他什么值,then部分的命令就不会执行。

if-then-else语句

格式如下:

if command
then
    commands
else
    commands
fi

嵌套if

格式如下:

if command1
then
    commands
elif command2
then
    more commands
fi

test命令

test命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回状态码0.
test格式非常简单:test condition

当用在if-then语句中,test命令看起来是这样的:

if test condition
then
    commands
fi

bash shell提供了另一种在if-then语句中声明test命令的方法:

if [ condition ]
then
    commands
fi

方括号定义了test命令中用到的条件。注意,左括号右侧和右括号左侧都需加一个空格,否则会报错。
test命令可以判断3类条件:
- 数值比较
- 字符串比较
- 文件比较

数值比较

test命令的数值比较功能

比较描述
n1 -eq n2检查n1是否与n2相等
n1 -ge n2检查n1是否大于等于n2
n1 -gt n2检查n1是否大于n2
n1 -le n2检查n1是否小于等于n2
n1 -lt n2检查n1是否小于n2
n1 -ne n2检查n1是否不等于n2

字符串比较

test命令的字符串比较功能

比较描述
str1 = str2检查str1是否和str2相同
str1 != str2检查str1是否和str2不同
str1 < str2检查str1是否比str2小
str1 > str2检查str1是否比str2大
-n str1检查str1的长度是否非0
-z str1检查str1的长度是否为0

比较字符串相等性时,test会将所有标点和大写也考虑在内。
比较字符串顺序时,大于小于符号必须转义,否则会理解为重定向符;大于小于顺序和sort命令所采用的不同。

文件比较

test命令的文件比较功能

比较描述
-d file检查file是否存在并是一个目录
-e file检查file是否存在
-f file检查file是否存在并是一个文件
-r file检查file是否存在并可读
-s file检查file是否存在并非空
-w file检查file是否存在并可写
-x file检查file是否存在并可执行
-O file检查file是否存在并属于当前用户所有
-G file检查file是否存在并且默认组和当前用户相同
file1 -nt file2检查file1是否比file2新

复合条件测试

有两种布尔运算符可用:
[ condition ] && [ condition2 ]
[ condition ] || [ condition2 ]

if-then高级特性

双尖括号

命令格式如下:

((expression))

术语expression可以是任意的数学赋值或比较表达式。双尖括号命令中会用到的其他运算符如下:

符号含义
val++后增
val–后减
++val先增
–val先减
逻辑求反
~位求反
**幂运算
<<左位移
>>右位移
&位布尔和
|位布尔或
&&逻辑和
||逻辑或

双方括号

格式如下:[[ expression ]]
双括号里的expression使用了test命令中采用的标准字符串进行比较。它还提供了test命令未提供的另一个特性—-模式匹配。例如你可以定义一个正则表达式来匹配字符串:

if [[ $USER == r* ]]

双方括号命令匹配$USER环境来看它是否以字母r开头。如果是的话,比较就会通过。

case命令

使用case命令,而不用写出那么多elif语句来不断检查相同变量值。case命令会检查单个变量列表格式的多个值:

case variable in
pattern1 | pattern2) commands1::
pattern3) commands2::
*) default commands::
esac
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值