在 Bash 脚本中否定 if 条件
- 2024-11-05 08:37:00
- admin 原创
- 27
问题描述:
我仍在尝试否定以下命令:
wget -q --tries=10 --timeout=20 --spider http://google.com
if [[ $? -eq 0 ]]; then
echo "Sorry you are Offline"
exit 1
如果我已连接到互联网,此 if 条件将返回 true。我希望它反过来发生,但放在!
任何地方似乎都行不通。
解决方案 1:
您可以选择:
if [[ $? -ne 0 ]]; then # -ne: not equal
if ! [[ $? -eq 0 ]]; then # -eq: equal
if [[ ! $? -eq 0 ]]; then
!
分别反转以下表达式的返回值。
解决方案 2:
更好的
if ! wget -q --spider --tries=10 --timeout=20 google.com
then
echo 'Sorry you are Offline'
exit 1
fi
解决方案 3:
如果你觉得懒的话,这里有一个在操作后使用||
(或)和(与)处理条件的简洁方法:&&
wget -q --tries=10 --timeout=20 --spider http://google.com || \n{ echo "Sorry you are Offline" && exit 1; }
解决方案 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
解决方案 5:
由于您正在比较数字,因此可以使用算术表达式,这样可以更简单地处理参数和比较:
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 规范并不要求(尽管提到可能的扩展)。
尽管如此,$?
我认为最好完全避免,就像Cole 的回答和Steven 的回答一样。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD