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