在一个半猜测,你想要写的是:
if [ "$#" -eq 1 ] && grep -q "$1" test.txt; then
在什么ocassions我们应该用方括号?
在历史上,测试命令,/bin/test
是有联系的/bin/[
,并且是外部命令,而不是外壳内置。现在(几十年来),它一直是内置的外壳。但是,它遵循命令的结构,需要空格来分隔参数,如果它被调用为[
,那么最后一个参数必须是]
。
至于当你使用它时,你需要测试一个条件时使用它。
请注意,你可以写:
if ls; false; true; then echo "the last command counts"; else echo "no it doesn't"; fi
的if
命令执行一个或多个命令序列,并测试最后一个命令的退出状态。如果退出状态为0,则成功执行then
子句;如果退出状态不为0,则采用else
子句。
因此,您可以在需要测试某些东西时使用该测试。它可以是if
或elif
或while
(或until
)的一部分。它也可以对自己使用||
或&&
:
[ -z "$1" ] && echo "No arguments - or the first argument is an empty string"
[ "$var1" -gt "$var2" ] || echo "Oops!" && exit 1
这些可以写成if
陈述过,当然:
if [ -z "$1" ]
then echo "No arguments - or the first argument is an empty string"
fi
if [ "$var1" -le "$var2" ]
then
echo "Oops!"
exit 1
fi
注意,我需要反转测试在第二改写。 Bash有一个内置的!
运营商用于反转下面的命令的退出状态,所以我还可以这样写:
if ! [ "$var1" -gt "$var2" ]
和test
有!
太多,所以它也可以写成:
if [ ! "$var1" -gt "$var2" ]
该文件有多大? – 2014-11-08 04:52:42