编写shell脚本时,如果需要在某个命令执行失败则终止执行,可以使用|| 和 && 运算符结合

正常执行

cd ~ || exit

终止执行

cd ~xxxx || exit

echo 'success'

但是想在终止时输出一些错误信息,怎么写?

第一种

cd dir || echo '出错啦' && exit

❌ 错误

shell 中运算符没有优先级,从左向右执行

当 cd dir 执行成功时,会执行 exit,cd dir 返回0,不会执行 || echo '出错啦',但是会执行 && exit

当 cd dir 执行失败时,会执行 echo '出错啦' 和 exit

所以都会终止执行

第二种

cd dir || (echo '出错啦' && exit)

❌ 错误

当 cd dir 执行成功时,继续执行

当 cd dir 执行失败时,会执行 echo '出错啦' 然后继续往下执行

原因:加了括号,命令执行结果是括号内的命令执行结果(是否出错),括号内的exit不会影响后续命令的执行

正确的代码

很简单

cd dir || ! echo '执行出错啦' || exit

这是正解

当 cd dir 返回非0,会执行 ! echo '执行出错啦'

为什么要加 !,因为 echo '' 会返回0,加了 ! 会让 || 误认为前边命令执行失败了,所以会执行 exit

短路与 &&:前者为真,才执行后边;前边为假,都不执行

短路或 ||:前者为真,后者不执行;前者为假,后者执行

还有另外一种写法

cd dir

c=

c -ne 0 ]; then

echo '执行出错啦'

exit 1

fi

好像有点复杂

bash忽略错误继续执行_shell 执行命令失败则中断执行 类似断言相关推荐

  1. 执行远程linux命令,linux shell 远程执行命令

    经常要部署多台服务器上面的应用,如果一个个机器的登录太麻烦. 所有就想到编写一个脚本来部署不同的服务器 前提条件: 配置ssh免登陆 如果不会的请参加我的另外一篇文章 http://blog.csdn ...

  2. (shell脚本编程)linux如何利用脚本执行多条命令以及linux如何执行定时任务

    文章目录 shell脚本编程 条件语句 脚本执行多条命令 执行定时任务 本文着重于提高我们的生产力,所以将这几个作为了一个专题. shell脚本编程 脚本中不同语句用分号隔开,和c语言一样. for, ...

  3. shell脚本循环执行一个linux命令,Linux中循环执行shell命令的方法

    Linux命令行,循环执行shell命令 死循环 命令格式while true ;do ; done; 可以将 command 替换为任意命令. 下面以echo "hello"; ...

  4. 执行docker一系列命令失败

    出现这种情况之后,执行下面的命令即可. systemctl restart docker

  5. linux一次执行多个命令,linux 一次执行多条命令

    1.mkdir myfile ; chmod -R 777 myfile [root@iZ9488z4qfcZ myfile]# mkdir www ; chmod -R 777 www [root@ ...

  6. 曙光服务器ipmtool查看服务器信息,执行ipmitool fru命令失败

    经过定位发现函数的调用栈如下 main --> ipmi_main --> ipmi_cmd_run --> ipmi_fru_main --> ipmi_fru_print_ ...

  7. Bash中命令连接符的用法——一次执行多个命令-转

    多个命令可以放在一行上,其执行情况得依赖于用在命令之间的分隔符. 如果每个命令被一个分号 (;) 所分隔,那么命令会连续的执行下去,如: 引用 beyes@linux-beyes:/proc> ...

  8. Bash中命令连接符的用法——一次执行多个命令

    多个命令可以放在一行上,其执行情况得依赖于用在命令之间的分隔符. 如果每个命令被一个分号 (;) 所分隔,那么命令会连续的执行下去,如: 引用 beyes@linux-beyes:/proc> ...

  9. Linux 命令行上执行多个命令(分隔符简介使用)

    Linux 系统可以在一个命令行上执行多个命令,相应的命令行的分隔符简介及使用如下: ; 如果命令被分号(;)所分隔,那么命令会连续的执行下去,就算是错误的命令也会继续执行后面的命令.示例如下: ls ...

最新文章

  1. windows下mysql开启慢查询
  2. 【原创】POSTGRESQL 分区表初次体验
  3. hive shell/sql 命令行
  4. java的流套接_java-使用流关闭套接字
  5. html的下拉刷新页面,html下拉刷新上拉加载Refresher3.0
  6. Media Player Classic - HC 源代码分析 5:关于对话框 (CAboutDlg)
  7. trycatch 不能捕获运行时异常_软件运行异常时的多种排查思路与方法
  8. split,splice,slice,substr,substring使用方法总结
  9. 父与子编程之旅第十章pygame下载+安装+pip更新
  10. 网页扫雷(简易版)(一)
  11. 超星高级语言程序设计实验作业 (实验02 分支与循环程序设计)(三)
  12. acp计算机编程大赛时间,2021年ACP考试时间安排 - 希赛网
  13. STM32F107VCTx HAL库 USART通信 DMA通信 友善串口调试助手 PL2303驱动安装
  14. 基于ROS的语音控制机器人(一):基本功能的实现
  15. 记一次海康威视笔试题小练手
  16. 从业20年的“老司机”跟你聊聊:超融合技术哪家强?!
  17. 分布式系统可用性和可靠性的区别,可用性如何计算,以及如何做到高可用和高可靠
  18. cocos-creator学习笔记1(旋转,位置移动,键盘监控移动基础)
  19. LeetCode题解:x的平方根
  20. 基于Python 3.11.0版本模拟登录并爬取西安理工大学正方教务系统的学分绩点并计算

热门文章

  1. springboot 事件监听器
  2. 如何在Excel中调用Python脚本,实现数据自动化处理!
  3. foxmail皮肤_七大改变!Foxmail 6.5新功能体验
  4. V4L2视频驱动框架---meida_device管理模块简述
  5. omnipeek安装包亲测可用
  6. 常用数学符号 希腊字母
  7. UVa 紫书50题留念
  8. 一、Excel简介、Excel的基本概念及操作、简单小工具
  9. elementUI tooltip箭头样式(表格自定义)
  10. 4399 面试笔试题