条件语句
算术比较
条件通常被放置在封闭的中括号内。一定要注意在[或]与操作数之间有一个空格。如果忘记了这个空格,脚本就会报错。例如:
[ $var-eq 0 ] var等于0时,返回真 ; [ $var-ne 0 ]var为非0时,返回真
重要的操作符:
-gt | 大于。 |
-lt | 小于。 |
-ge | 大于或等于。 |
-le | 小于或等于 |
-eq | 等于 |
-ne | 不等于 |
可以按照下面的方法结合多个条件进行测试:
- [ $var1 -ne 0 -a $var2 -gt 2 ] # 使用逻辑与-a
- [ $var -ne 0 -o $var2 -gt 2 ] # 逻辑或 -o
字符串比较
使用字符串比较时,最好用双中括号,因为有时候采用单个中括号会产生错误,所以最好避开它们。
可以检查两个字符串,看看它们是否相同.
[[ $str1 = $str2 ]] | 当$str1等于$str2时,返回真。也就是说,$str1和$str2包含的文本是一模一样的。 |
[[ $str1 == $str2 ]] | 这是检查字符串是否相等的另一种写法。也可以检查两个字符串是否不同。 |
[[ $str1 != $str2 ]] | 如果$str1和$str2不相同,则返回真。我们还可以检查字符串的字母序情况,具体如下所示。 |
[[ $str1 > $str2 ]] | 如果$str1的字母序比$str2大,则返回真。 |
[[ $str1 < $str2 ]] | 如果$str1的字母序比$str2小,则返回真。 |
[[ -z $str1 ]] | 如果$str1包含的是空字符串,则返回真。 |
[[ -n $str1 ]] | 如果$str1包含的是非空字符串,则返回真。 |
使用逻辑运算符 && 和 || 能够很容易地将多个条件组合起来;if [[ -n $str1 ]] && [[ -z $str2 ]],非的语义 if [[ ! -n $str1 ]] ;注意空格
文件系统
[ -f $file_var ] | 如果给定的变量包含正常的文件路径或文件名,则返回真。 |
[ -d $var ] | 如果给定的变量包含的是目录,则返回真。 |
[ -e $var ] | 如果给定的变量包含的文件存在,则返回真。 |
[ -w $var ] | 如果给定的变量包含的文件可写,则返回真。 |
[ -r $var ] | 如果给定的变量包含的文件可读,则返回真。 |
[ -c $var ] | 如果给定的变量包含的是一个字符设备文件的路径,则返回真。 |
[ -b $var ] | 如果给定的变量包含的是一个块设备文件的路径,则返回真。 |
[ -x $var ] | 如果给定的变量包含的文件可执行,则返回真。 |
[ -L $var ] | 如果给定的变量包含的是一个符号链 |
控制语句
if 语句
我们可以用if、if else以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项。
if [ condition] then commands else commands fi |
值得注意的是如果then 和 if 判断在同一行 需要加上 “;”
for 循环
形式1
值之间用空格分隔
for 变量 in XXX do 程序 done # 示例 1 for item in 1 2 3 do echo $item done # 示例 2 for item in $(ls ~) do echo $item done # 示例 3 for 变量 in `seq 1 100` do 程序 done |
形式2
用seq
for ((初始值;控制条件;变量变化)) do 程序 done |
while 循环
while [条件判断式] do 程序 done |
附 特殊符号
‘’ | 单引号。在单引号中所有的特殊符号,如“$”和“`”(反引号)都没有特殊含义。 |
“” | 双引号。在双引号中特殊符号都没有特殊含义,但是“$”、“`”和“\”是例外,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。 |
`` | 反引号。反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在Shell脚本中,#开头的行代表注释。 |
$ | 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值。 |
\ | 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用。 |