否则,如果在bash脚本中的条件

我是新来的bash和我坚持试图否定下面的命令:

wget -q --tries=10 --timeout=20 --spider http://google.com if [[ $? -eq 0 ]]; then echo "Sorry you are Offline" exit 1 

如果我连接到互联网,如果条件返回true。 我希望它发生的另一种方式,但把! 任何地方似乎没有工作。

你可以select:

 if [[ $? -ne 0 ]]; then # -ne: not equal if ! [[ $? -eq 0 ]]; then # -eq: equal if [[ ! $? -eq 0 ]]; then 

! 将下面的expression式的返回值分别取反。

更好

 if ! wget -q --spider --tries=10 --timeout=20 google.com then echo 'Sorry you are Offline' exit 1 fi 

如果你感觉懒惰,这里使用||来处理条件的简单方法 (或)和&& (和)操作后:

 wget -q --tries=10 --timeout=20 --spider http://google.com || \ { echo "Sorry you are Offline" && exit 1; } 

你可以使用不等于的比较-ne而不是-eq

 wget -q --tries=10 --timeout=20 --spider http://google.com if [[ $? -ne 0 ]]; then echo "Sorry you are Offline" exit 1 

既然你正在比较数字,你可以使用一个算术expression式 ,它允许更简单的处理参数和比较:

 wget -q --tries=10 --timeout=20 --spider http://google.com if (( $? != 0 )); then echo "Sorry you are Offline" exit 1 fi 

请注意,除了-ne ,您可以使用!= 。 在算术上下文中,我们甚至不需要在参数前加$ ,也就是说,

 var_a=1 var_b=2 (( var_a < var_b )) && echo "a is smaller" 

工作得很好。 这不适用于$? 特殊的参数,虽然。

(( ... ))构造在Bash中是可用的,但POSIX shell规范并不要求(虽然可能是扩展名)。

这一切被说,最好避免$? 在我看来,就像在Cole的回答和Steven的回答中一样 。