条件测试
每个命令结束后,都有返回一个结束状态值,值为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。 - 在
[[ 判断式 ]]中,=~的右边放置要匹配的样式。样式不能用引号引起,否则不会被当作样式匹配。