条件测试
每个命令结束后,都有返回一个结束状态值,值为0表示执行成功,非0表示失败。条件测试就是以状态返回值的真假值作为判断依据:值为0判断为真,非0判断为假。
条件测试的写法
- 执行一个命令,可以包括管道命令。例如:
if grep -q "rm" fn.sh; then
echo "find rm command."
else
echo "not found ."
fi
- 传回某一命令执行结果的相反值:
! command
。!
与命令之间用空格分开。
if ! grep -q "rm" fn.sh; then
echo "not found ."
else
echo "find rm command."
fi
- 使用符合命令:(( expression ))。如果expression的值不为0,则传回真值(0),否则传回假值(1)。
-
使用Bash关键字
[[
、]]
组成的式子:[[ 判断式 ]]
。注意:[[
的后面、]]
的前面都要有空格。
if [[ str > xyz ]]; then
echo "str bigger than xyz."
else
echo "str not bigger than xyz."
fi
- 使用内置命令test:
test 判断式
。
if test "str" \> "xyz"; then
echo "str bigger than xyz."
else
echo "str not bigger than xyz."
fi
- 使用内置命令:
[]
。[]
和test
的用法是相同的,可以互换。注意:[
的后面、]
的前面都要有空格。
if [ "str" \> "xyz" ]; then
echo "str bigger than xyz."
else
echo "str not bigger than xyz."
fi
-
使用
-a, -o
进行逻辑组合。-a
是逻辑与,-o
逻辑或。例如:[ -f filename -a -x filename ]
,如果filename可读且可执行则为真。 -
注意:
test
和[]
都需要对Bash特殊字符进行转义;而[[]]
不需要,<, >, &&, ||
都可以在其中自由使用。- 在
[[ 判断式 ]]
中,如果使用==, !=
,且在这两个运算符右边的字符串没有加上单引号或双引号,则==, !=
会视为需要匹配该字符串所形成的“样式”,如果匹配,返回0,否则返回1。 - 在
[[ 判断式 ]]
中,=~
的右边放置要匹配的样式。样式不能用引号引起,否则不会被当作样式匹配。