在Ubuntu 11.04上的bash 4.2.8(1)-release
(x86_64-pc-linux-gnu
)此命令
[ $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 ] || echo "no"
产量
echo: command not found
只要||
条款生效即可。 &&
子句正在运行。我尝试更改订单(先||
,先&&
)无效。
有趣的是,
true && echo "yes" || echo "no"
产量
yes
和
false && echo "yes" || echo "no"
产量
no
所以我认为我的test-clause出了问题。我想检查some.log的文件长度是否小于或等于6,如果没有则再做其他事情,如果是的话。
test-clause中的双括号也不起作用。
但长期形式的测试确实有效:
test $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 && echo "yes" || echo "no"
yes
好笑,是吗?
与往常一样,感谢您提供此方面的任何提示/提示。
Christian.
答案 0 :(得分:1)
试试这个(2 [和]):
[[ $(wc -l /var/www/some.log|cut -d " " -f 1) -le 6 ]] || echo "no"
^^ ^^
来自bash的男人:
复合命令
...
[[ expression ]]
根据条件表达式表达式的评估,返回0或1的状态。表达式由下面在条件表达式下描述的原色组成。
我认为单个[和]不是执行测试的标准,即使它适用于我。
修改强>
实际上,[和]是进行测试的标准方法,它是bash中的buildin命令。如果[[...]]工作且[...]不起作用,我不会完全理解它。它可能与[和]中执行/未执行的扩展有关。
答案 1 :(得分:1)
这与您的其他问题here中的问题相同 - 您的空间为0xC2 0xA0
而不是0x20
。从您的问题中复制粘贴并删除:
$ echo " echo " | hexdump -C
00000000 20 c2 a0 65 63 68 6f 20 0a | ..echo .|
00000009
# ^^ ^^ ^^
删除并重新输入两个前导空格后:
$ echo " echo " | hexdump -C
00000000 20 20 65 63 68 6f 20 0a | echo .|
00000008
# ^^ ^
答案 2 :(得分:0)
不确定为什么你的不工作
试试这个
:>bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
[ $( wc -l < /var/www/some.log ) -le 6 ] || echo no
no
我希望这会有所帮助。
P.S。因为您似乎是新用户,如果您得到的答案可以帮助您,请记住将其标记为已接受,并且/或者给它一个+(或 - )作为有用的答案。