我一直在尝试否定以下命令:
wget -q --tries=10 --timeout=20 --spider http://google.com if [[ $? -eq 0 ]]; then echo "Sorry you are Offline" exit 1
如果我连接到互联网,这个if条件返回true。我希望它以相反的方式发生,但是把!放在任何地方似乎都不起作用。
!
lndjwyie1#
您可以选择:
if [[ $? -ne 0 ]]; then # -ne: not equal if ! [[ $? -eq 0 ]]; then # -eq: equal if [[ ! $? -eq 0 ]]; then
!分别反转以下表达式的返回值。
cyvaqqii2#
更好
if ! wget -q --spider --tries=10 --timeout=20 google.com then echo 'Sorry you are Offline' exit 1 fi
z18hc3ub3#
如果你觉得很懒,下面是一个简洁的方法,在操作之后使用||(or)和&&(and)来处理条件:
||
&&
wget -q --tries=10 --timeout=20 --spider http://google.com || \ { echo "Sorry you are Offline" && exit 1; }
iugsix8n4#
由于要比较数字,因此可以使用算术表达式,这样可以更简单地处理参数和比较:
wget -q --tries=10 --timeout=20 --spider http://google.com if (( $? != 0 )); then echo "Sorry you are Offline" exit 1 fi
请注意,您可以使用!=来代替-ne,在算术上下文中,我们甚至不必将$添加到参数前面,即:
!=
-ne
$
var_a=1 var_b=2 (( var_a < var_b )) && echo "a is smaller"
工作得很好,但是这不适用于$?特殊参数。此外,由于(( ... ))将非零值求值为真,即,对于非零值具有返回状态0,否则具有返回状态1,因此我们可以将其缩短为
$?
(( ... ))
if (( $? )); then
但这可能会让更多的人感到困惑,而不是节省的击键值多少钱。(( ... ))结构在Bash中可用,但POSIX shell规范并不要求它(尽管提到了可能的扩展)。话虽如此,在我看来,最好还是完全避免$?,就像Cole's answer和Steven's answer一样。
m4pnthwp5#
可以使用不等比较-ne代替-eq:
-eq
wget -q --tries=10 --timeout=20 --spider http://google.com if [[ $? -ne 0 ]]; then echo "Sorry you are Offline" exit 1 fi
5条答案
按热度按时间lndjwyie1#
您可以选择:
!
分别反转以下表达式的返回值。cyvaqqii2#
更好
z18hc3ub3#
如果你觉得很懒,下面是一个简洁的方法,在操作之后使用
||
(or)和&&
(and)来处理条件:iugsix8n4#
由于要比较数字,因此可以使用算术表达式,这样可以更简单地处理参数和比较:
请注意,您可以使用
!=
来代替-ne
,在算术上下文中,我们甚至不必将$
添加到参数前面,即:工作得很好,但是这不适用于
$?
特殊参数。此外,由于
(( ... ))
将非零值求值为真,即,对于非零值具有返回状态0,否则具有返回状态1,因此我们可以将其缩短为但这可能会让更多的人感到困惑,而不是节省的击键值多少钱。
(( ... ))
结构在Bash中可用,但POSIX shell规范并不要求它(尽管提到了可能的扩展)。话虽如此,在我看来,最好还是完全避免
$?
,就像Cole's answer和Steven's answer一样。m4pnthwp5#
可以使用不等比较
-ne
代替-eq
: