我希望在不正确echo时执行命令。cat /etc/passwd | grep "sysa"
echo
cat /etc/passwd | grep "sysa"
我究竟做错了什么?
if ! [ $(cat /etc/passwd | grep "sysa") ]; then echo "ERROR - The user sysa could not be looked up" exit 2 fi
尝试
if ! grep -q sysa /etc/passwd ; then
grep``true如果找到搜索目标,则返回,否则返回false。
grep``true
false
所以不是false== true。
true
ifshell 中的评估被设计为非常灵活,并且很多时候不需要命令链(如您所写)。
if
此外,按原样查看您的代码,您$( ... )对 cmd-substitution 形式的使用值得称赞,但请考虑该过程的结果。试着echo $(cat /etc/passwd | grep "sysa")看看我的意思。您可以通过使用-cgrep 的 (count) 选项来进一步实现这一点,然后执行if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then该操作,但这是相当老派的。
$( ... )
echo $(cat /etc/passwd | grep "sysa")
-c
if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
但是,您可以使用最新的 shell 功能(算术评估),例如
if ! (( $(grep -c "sysa" /etc/passwd) == 0 )) ; then ...`
这也为您提供了使用基于 c-lang 的比较运算符的好处,==,<,>,>=,<=,%也许还有其他一些。
==,<,>,>=,<=,%
在这种情况下,根据 Orwellophile 的评论,算术评估可以进一步缩减,例如
if ! (( $(grep -c "sysa" /etc/passwd) )) ; then ....
要么
if (( ! $(grep -c "sysa" /etc/passwd) )) ; then ....
最后,还有一个 奖项 ,叫做Useless Use of Cat (UUOC). :-) 有些人会跳上跳下哭哥特卡!我只想说它grep可以在它的命令行上取一个文件名,那么为什么在你不需要的时候调用额外的进程和管道构造呢?;-)
Useless Use of Cat (UUOC)
grep
我希望这有帮助。