使用结构化命令
1. if-then 语句
语句格式:
if command
then
command
fi
bash shell if语句会运行if行定义的那个命令。如果该命令的退出状态码时0,则位于then部分的命令就会被执行。
2. if -then-else 语句
差不多
3. if嵌套
if command1
then
commands
elif command2
then
more commands
fi
4. test命令
test 命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0,如果条件不成立就会退出状态码1.
eg:
if test condition
then
commands
fi
另外一种在shell中申明test命令的方法:
if [ condition ]
then
commands
fi
ps:必须在左括号右侧和右括号左侧加一个空格,否则报错。
Test命令可以判断3类条件
a. 数值比较
a -eq b 是否相等
a -ge b 是否大于或等于
a -gt b 是否大于
a -le b 是否小于或等于
a -lt b 是否小于
a ne b 是否不等于
b. 字符串比较
str1 = str2
str1 != str2
str1 < str2
str1 > str2
-n str1 是否非0
-z str1 是否为0
c. 文件比较
5. 使用双圆括号
test命令只允许进行简单的算术操作,双圆括号提供了更多的编程语言里的数学符号。格式如下:
((expression))
expression 可以是任意的数学赋值或比较表达式。双圆括号命令中会用到的其他运算符:
val++ , val-- , ++val , --val , ! , ~ , ** , << , >> ,& ,| ,&& , ||
eg:
val1 = 10
if(($val1 **2>90))
then
((val2 = $val1**2))
echo “The square of $val1 is $val2”
fi
6. 使用双方括号
格式:
[[expression]]
双方括号里的expression 使用了test命令中的采用的标准字符串进行比较。但他提供了另一个功能——模式匹配,在模式匹配中可以定义一个正则表达式
7. case命令
使用case命令不用写出很多elif 语句来不断检查相同变量值。Case命令会检查单个变量列表格式的多个值:
case variable in
pattern1|pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
星号会捕获所有列出模式都不匹配的值;