您的位置:首页 > 运维架构 > Shell

Shell脚本--结构化命令

2016-02-02 15:07 585 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell Linux 脚本