Shell的退出状态(if语句判断的是某个命令的退出状态)
以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除。
一、退出状态
(1)不管是 Bash 内置命令,还是外部的 Linux 命令,还是自定义的 Shell 函数,当它运行结束或者退出时,都会返回一个比较小的整数值给调用它的程序,这个整数值就表示命令的退出状态。
很多 Linux 命令其实就是一个C语言程序,熟悉C语言的读者都知道,main() 函数的最后都有一个return 0,如果程序想在中间退出,还可以使用exit 0,这其实就是C语言程序的退出状态。当有其它程序调用这个程序时,就可以捕获这个退出状态。
(2)在 Shell 中,有多种方式取得命令的退出状态,其中 $?是最常见的一种。
xjh@ubuntu:~/iot/tmp$ cat test.sh
#!/bin/bashread a
read b(( $a == $b ));echo "退出状态:"$?
xjh@ubuntu:~/iot/tmp$ ./test.sh
33
33
退出状态:0
xjh@ubuntu:~/iot/tmp$ ./test.sh
23
45
退出状态:1
xjh@ubuntu:~/iot/tmp$
(3)if 语句的判断条件,从本质上讲,判断的就是命令的退出状态。注意,Shell中退出状态为 0 表示“成功”、“真”,即程序执行完成并且没有遇到任何问题,除 0 以外的其它任何退出状态都为“失败”、“假”。注意,这正好与C语言的规定相反,在C语言中,0 表示“假”,其它值表示“真”。
如果shell中一个命令(比如判断大小)成立,则其返回值为0,而shell中的if也是命令返回值为0时才成立,这样一来,我们就可以只根据命令(比如大小关系)是否正确来判断if是否执行了,所谓“负负得正”,不用再绕弯子先去判断命令的返回值,然后再根据if只在返回值为0时才成立。比如下面代码中,直接看 $a是否等于$b即可。
xjh@ubuntu:~/iot/tmp$ cat test.sh
#!/bin/bashread a
read bif (( $a == $b )) # a=33,b=33时,由上面可知(( $a == $b ))退出的状态为0(表示成功、真) # 此时if根据退出的状态为真,then后面的内容得以执行# 或者直接看 $a是否等于$b即可。
thenecho "a和b相等"
fi
xjh@ubuntu:~/iot/tmp$ ./test.sh
33
33
a和b相等
xjh@ubuntu:~/iot/tmp$
二、退出状态和逻辑运算符的组合
(1)在if语句中,我们可以使用逻辑运算符将多个退出状态组合起来,一次判断多个条件。
| 运算符 | 使用格式 | 说明 |
|---|---|---|
| && | if expression1 && expression2 | 逻辑与运算符,当 expression1 和 expression2 同时成立时,整个表达式才成立。 如果检测到 expression1 的退出状态为1(表示失败),就不会再检测 expression2 了,因为不管 expression2 的退出状态是什么,整个表达式必然都是不成立的,检测了也是多此一举。 |
| || | if expression1 || expression2 | 逻辑或运算符,expression1 和 expression2 两个表达式中只要有一个成立,整个表达式就成立。 如果检测到 expression1 的退出状态为 0(表示成功),就不会再检测 expression2 了,因为不管 expression2 的退出状态是什么,整个表达式必然都是成立的,检测了也是多此一举。 |
| ! | if !expression | 逻辑非运算符,相当于“取反”的效果。如果 expression 成立,那么整个表达式就不成立;如果 expression 不成立,那么整个表达式就成立。 |
(2)举例:将用户输入的 URL 写入到文件中。下面代码中,test 是 Shell 内置命令,可以对文件或者字符串进行检测,其中,-w选项用来检测文件是否存在并且可写,-n选项用来检测字符串是否非空。>表示重定向,默认情况下,echo 向控制台输出,这里我们将输出结果重定向到文件。
xjh@ubuntu:~/iot/tmp$ cat test.sh
#!/bin/bashread filename
read urlif test -w $filename && test -n $url
thenecho $url > $filenameecho "写入成功"
elseecho "写入失败"
fi
xjh@ubuntu:~/iot/tmp$ ./test.sh
test.txt
http://www.baidu.com.cn
写入失败
xjh@ubuntu:~/iot/tmp$ touch test.txt
xjh@ubuntu:~/iot/tmp$ ls
test1.sh test2.sh test.sh test.txt
xjh@ubuntu:~/iot/tmp$ ./test.sh
test.txt
http://www.baidu.com.cn
写入成功
xjh@ubuntu:~/iot/tmp$
xjh@ubuntu:~/iot/tmp$ test -w test.txt
xjh@ubuntu:~/iot/tmp$ echo $?
0
xjh@ubuntu:~/iot/tmp$ test -w test.c
xjh@ubuntu:~/iot/tmp$ echo $?
1
xjh@ubuntu:~/iot/tmp$
相关文章:
Shell的退出状态(if语句判断的是某个命令的退出状态)
以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除。 一、退出状态 (1)不管是 Bash 内置命令,还是外部的 Linux 命令,还是自定义的 Shell 函数,当它运行结束或者退出时,都…...
Scala面向对象
与java的区别和联系 类的定义: class Person{ var name "scala" def sayHello(){ println("Hello,"name) } def getName name } 注意:如果在定义方法的时候指定了(),那么在调用的时候()可写可不写,如果在定…...
LLaMA-META发布单卡就能跑的大模型
2023年2月25日,Meta使用2048张A100 GPU,花费21天训练的Transformer大模型LLaMA开源了。 1.4T tokenstakes approximately 21 days 以下是觉得论文中重要的一些要点 1)相对较小的模型也可以获得不错的性能 研究者发现在给定计算能力限制的情…...
第一篇自我介绍(单片机)
小白的单片机之旅 🤔自我介绍🤔 😊学习目标😊 😜关于单片机😜 🌝目标公司🌝 🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢…...
Tik Tok品牌营销,如何做好内容打法
TikTok 上做好品牌营销,并不能只关注品牌所获得的视频浏览量和点赞量,根据潜在客户需求生成的内容策略同样至关重要。通过建立营销漏斗模型,可以将 TikTok 策略分为三种不同类型的内容,从具有广泛吸引力的内容转变为具有高度针对性…...
2023年5月软考软件设计师备考经验
一、考试目标: 通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成…...
SpringBoot 2.x ——使用 mail 实现邮件发送
文章目录前言环境、版本等pom依赖引入springboot项目配置文件获取邮箱授权码配置properties文件定义接口信息接收类编写邮件发送服务类编写接口swagger测试1、简单邮件发送2、html格式发送(支持附件)前言 最近再看xxl-job的源码,其中在邮件告警通知中使用到了告警信…...
项目结束先别着急庆祝,项目经理还有这些事要做
项目管理生命周期结束阶段的目的是确认项目可交付成果的完成,使项目发起人满意,并向所有参与者和利益相关者传达项目的最终处置和状态。 项目结束确保项目的所有参与者和利益相关者都清楚后续活动(如新项目、服务过渡、SLA等)&a…...
没想到的 IIFE
没想到的 IIFE 有时候我们想要立即执行一下所定义的函数,可以怎么做呢? function foo(num) {return num ?? 1; }foo();写完然后调用对吧,这是可以的,但你有没有觉得这其实有点脱裤子放屁了,完全可以直接调用就是了…...
「牛客网C」初学者入门训练BC156
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练 🔥座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错…...
【Proteus仿真】【STM32单片机】粮仓温湿度控制系统设计
文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用声光报警模块、LCD1602显示模块、DHT11温湿度模块、继电器模块、加热加湿除湿风扇等。 主要功能: 系统运行后,LCD1602显示…...
九年时间,倾情投入,JumpServer开源堡垒机v3.0正式发布
2023年2月27日,JumpServer开源堡垒机正式发布v3.0版本。在JumpServer开源堡垒机v3.0版本的设计过程中,我们始终秉持着“内外兼修”的原则,旨在进一步提升用户的使用体验,真正用心做好一款开源堡垒机。 在JumpServer v3.0版本中&…...
【ROS学习笔记5】服务通信
【ROS学习笔记5】服务通信 文章目录【ROS学习笔记5】服务通信前言一、服务通信的理论模型二、服务通信自定义srv三、服务通信自定义srv的Cpp实现四、服务通信自定义srv的Python实现五、Reference写在前面,本系列笔记参考的是AutoLabor的教程,具体项目地址…...
“华为杯”研究生数学建模竞赛2006年-【华为杯】A题:Ad Hoc 网络中的区域划分和资源分配问题(附获奖论文)
赛题描述 Ad Hoc网络是当前网络和通信技术研究的热点之一,对于诸如军队和在野外作业的大型公司和集团来说,Ad Hoc网络有着无需基站、无需特定交换和路由节点、随机组建、灵活接入、移动方便等特点,因而具有极大的吸引力。 在Ad Hoc网络中,节点之间的通信均通过无线传输来完…...
编写第一个JAVA程序,常见踩坑记录
编写第一个JAVA程序 预备环境 电脑需要安装JDK 及 配置环境变量打开cmd 输入java -version 能运行在说 创建工程 创建文件夹javaCode(随意叫…) 创建文件Hello.java 编写代码 public class Hello{public static void main(String[] args){System.out.print("hello wo…...
求职陷阱:Lazarus组织以日本瑞穗銀行等招聘信息为诱饵的攻击活动分析
概述 Lazarus组织是疑似具有东北亚背景的APT组织,奇安信威胁情报中心内部追踪编号为APT-Q-1,因2014年攻击索尼影业开始受到广泛关注,其攻击活动最早可追溯到2007年。该组织早期主要针对其他国家政府机构,以窃取敏感情报为目的&am…...
【C语言每日一题】判断字符串旋转结果(附加字符串左旋详解)
【C语言每日一题】—— 判断字符串旋转结果😎😎😎 目录 💡前言🌞: 💛字符串左旋题目💛 💪 解题思路的分享💪 😊题目源码的分享…...
SpringSecurity+JWT+Redis进行用户鉴权和接口权限的控制
系统的登录,都做些什么?用户访问登录页时:会发起一个获取图片验证码的请求,后端先生成一个uuid代表此次的验证码,接着生成 "ab?答案" 的表达式,将前面的内容转换成流生成图片,后面的答案则存储到…...
七大排序(Java)
目录 一、插入排序 1. 直接插入排序 2. 希尔排序 二、选择排序 1. 直接选择排序 2. 堆排序 三、交换排序 1. 冒泡排序 2. 快速排序 四、归并排序 五、总结 一、插入排序 1. 直接插入排序 抓一张牌,在有序的牌中,找到合适的位置并且插入。 时间…...
分享一些可以快速掌握python语法的小技巧
下面是我总结的一些有助于快速掌握 Python 语法的小技巧,欢迎一起交流。 注释:在代码中添加注释可以帮助你和其他人理解代码的目的和功能。在 Python 中,使用 # 符号来添加单行注释,使用三引号 """ 或 来添加多行…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
