否则,如果在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的回答中一样 。