我是bash的新手,而且我一直试图否定以下命令:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
如果我已连接到互联网,则此if条件返回true。我希望它以相反的方式发生,但将!
放在任何地方似乎都不起作用。
答案 0 :(得分:162)
您可以选择:
if [[ $? -ne 0 ]]; then # -ne: not equal
if ! [[ $? -eq 0 ]]; then # -eq: equal
if [[ ! $? -eq 0 ]]; then
!
分别反转以下表达式的返回值。
答案 1 :(得分:69)
更好的
if ! wget -q --spider --tries=10 --timeout=20 google.com
then
echo 'Sorry you are Offline'
exit 1
fi
答案 2 :(得分:8)
如果您感到懒惰,请在操作后使用||
(或)和&&
(和)处理条件的简洁方法:
wget -q --tries=10 --timeout=20 --spider http://google.com || \
{ echo "Sorry you are Offline" && exit 1; }
答案 3 :(得分:4)
您可以使用不等比较-ne
代替-eq
:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -ne 0 ]]; then
echo "Sorry you are Offline"
exit 1
fi
答案 4 :(得分:4)
由于您正在比较数字,因此可以使用arithmetic expression,这样可以更简单地处理参数和比较:
return [
"lvel1" => [
"level2" => [
"level3" => [
1,
85151,
895151,
]
]
]
];
请注意,您可以使用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"
完美无缺。但是,这并不适用于$?
特殊参数。
此外,由于(( ... ))
将非零值评估为真,即非零值的返回状态为0,否则返回状态为1,否则我们可以缩短为
if (( $? )); then
但是这可能会比所节省的击键更容易让人感到困惑。
(( ... ))
构造在Bash中可用,但POSIX shell specification不需要(尽管可能的扩展名称)。
总而言之,我认为最好完全避免$?
,例如Cole's answer和Steven's answer。