程序中的流程控制是由比较和测试语句来处理的。在Bash中具备多种和UNIX系统特性相兼容的执行测试方法。
在Shell中我们可以用if,if else以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项。
if测试
if条件:
if condition;
then
commands;
fi
在这里会以fi结尾用于提示if的结束。
else if和else
if condition;
then
commands;
elif condition;
then
commands;
else
commands
fi
在if判断的条件中我们也可以使用逻辑运算符进行组合判断
[ condition ]&& action;#如果condition为真,则执行action
[ condition ]|| action;#如果为假,则执行action。
在这里注意[和]两个符号之间和中间的condition都会有个空格。
算数比较
在shell中有几个比较重要的比较符:
-eq:等于
-ne:不等于
-gt:大于
-lt:小于
-ge:大于或等于
-le:小于或等于
-a:逻辑于
-o:逻辑或
文件系统相关测试
我们可以使用不同的条件标志测试不同的文件系统相关属性。
[ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。
[ -x $var ]:如果给定的变量包含文件可执行,则返回真。
[ -d $var ]:如果给定的变量是目录则返回真。
[ -e $var ]:如果给定的变量包含的文件存在,则返回真
[ -c $var ]:如果给定的变量包含的是一个字符设备文件的路径,则返回真
[ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真
[ -w $var ]:如果给定的变量包含的文件可写,则返回真
[ -r $var ]:如果给定的变量包含的文件可读,则返回真
[ -L $var ]:如果给定的变量包含一个符号链接,则返回真
举例测试:
#! /bin/bash
fpath="/etc/passwd"
if [ -e $fpath ];then
echo File exits;
else
echo dose not exits;
fi
输出File exits
字符串比较
使用字符串比较时,最好使用双中括号,防止使用单个中括号会产生错误,所以最好避开它们。
可以检查两个字符串,看看它们是否相同。
在shell中=和==在比较的时候都是一样的
[[ $str1 = $str2 ]]和[[ $str1 == $str2 ]]一样,如果相等就返回true。
[[ $str1 > $str2 ]]如果str1字母序比str2大就返回真。
[[ -z $str1 ]]:如果str1包含的是空字符串,则返回真。
[[ -n $str1 ]]:如果str1包含的是非空字符串,则返回真。
举例如下:
#! /bin/bash
str1="not empty"
str2=""
if [[ -n $str1 ]] && [[ -z $str2 ]];
then
echo ok;
fi
输出OK