当前位置: 首页 > news >正文

08 Shell Script条件判断

Shell Script条件判断

一、Shell 状态和重定向

​ shell 在执行某个命令的时候,会返回两个返回值:

​ 命令的执行结果

​ 命令的执行状态

​ 返回状态保存到一个特殊变量:$? ,0表示执行状态成功。1-255表示执行命令不成功。

​ Shell 中命令的执行返回状态可以当作一个条件测试表达式:

​ 命令返回状态为0:真

​ 命令返回状态为1-255:假

​ 输出重定向

​ Shell中如果只想获取命令的执行返回状态,而不想看命令的执行结果,怎么办?

​ ①覆盖输出重定向:>

# 覆盖重定向
[root@localhost ~]# echo "abc" > abc.txt # 查看内容
[root@localhost ~]# cat abc.txt
abc

​ ②追加输出重定向:>>

# 追加重定向
[root@localhost ~]# echo "aaa" >> abc.txt# 查看内容
[root@localhost ~]# cat abc.txt
abc
aaa

​ ③错误信息覆盖(追加)输出重定向:2> 和2>>

# 错误覆盖输出
[root@localhost ~]# ls /opt/myfile &> abc.txt# 查看内容
[root@localhost ~]# cat abc.txt
ls: cannot access /opt/myfile: No such file or directory# 错误追加输出
[root@localhost ~]# ls /opt/abc.txt &>> abc.txt# 查看内容
[root@localhost ~]# cat abc.txt                
ls: cannot access /opt/myfile: No such file or directory
ls: cannot access /opt/abc.txt: No such file or directory

​ ④全部覆盖(追加)输出重定向:&> 和&>>

二、Shell逻辑操作符&&,||

​ 逻辑与&&和逻辑或||操作符:

​ cmd1 && cmd2

​ 根据cmd1的执行返回状态,如果cmd1为真,最后结果不能确定,cmd2会继续执行

​ 根据cmd1的执行返回状态,如果cmd1为假,最后结果已经确定为假,cmd2不需执行

​ cmd1 || cmd2

​ 根据cmd1的执行返回状态,如果cmd1为真,最后结果已经确定为真,cmd2不需执行

​ 根据cmd1的执行返回状态,如果cmd1为假,最后结果不能确定,cmd2会继续执行

# 创建sh文件
[root@localhost ~]# vi myshell.sh# 写入内容
#!/bin/bashfile="/opt/myfile/"
[ -d $file ] && echo "$file 已经存在"
[ -d $file ] || echo "$file 不存在"# 运行结果
[root@localhost ~]# bash myshell.sh
/opt/myfile/ 不存在

三、IF语句

一)Shell IF条件分支语句概述

​ 帮助文档:help if

​ 属于shell中的复合命令

​ 从语法可以看出涉及COMMANDS,在之前的学习中已经学习了不同用途的命令,都可以依据这些命令的执行结果来判断条件分支

​ 语法:

​ if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]… [ else COMMANDS; ] fi

​ 中括号是可选的意思

​ 分号可以使用换行符替代

​ 根据判断COMMANDS的退出状态选择:

​ COMMANDS成功执行:

​ then COMMANDS

​ COMMANDS执行失败:

​ elif COMMANDS

​ elif是else if的简写,在shell中空白符比较敏感

​ else COMMANDS

# 创建sh文件
[root@localhost ~]# vi myshell.sh# 写入内容
#!/bin/bash
if [ $# -eq 1 ]; thenecho "接收到一个参数,他是$1"
elif [ $# -ge 2 ]; thenecho "接受到的参数大于等于2个,第二个参数为:$2"
elseecho "没有接收到参数!!!"exit 1
fi# 不传递参数
[root@localhost ~]# bash myshell.sh
没有接收到参数!!!# 传递一个参数
[root@localhost ~]# bash myshell.sh abc
接收到一个参数,他是abc# 传递两个参数
[root@localhost ~]# bash myshell.sh abc abcd
接受到的参数大于等于2个,第二个参数为:abcd

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue3 Day1Day2-Vue3优势ref、reactive函数
  • vue 给循环列表的选中项加样式
  • 《仙境传说RO:新启航》游戏攻略,VMOS云手机辅助高效挂机助攻!
  • 【Elasticsearch系列十二】聚合-电视案例
  • 大数据新视界 --大数据大厂之探索ES:大数据时代的高效搜索引擎实战攻略
  • 【计算机网络】UDP 协议详解及其网络编程应用
  • Sqlmap中文使用手册 - File system access模块参数使用
  • 比特币10年价格数据(2014-2024)分析(进阶2_时间序列分析)
  • Docker 镜像制作(Dockerfile)
  • C++之第十二课
  • 华为OD机试 - 二维伞的雨滴效应(Python/JS/C/C++ 2024 E卷 200分)
  • 【新手上路】衡石分析平台使用手册-租户管理
  • 硬件看门狗导致MCU启动时间慢
  • Flask-JWT-Extended登录验证
  • python基础(1)pyenv安装和对Django使用
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 0基础学习移动端适配
  • 2017届校招提前批面试回顾
  • Cookie 在前端中的实践
  • Docker下部署自己的LNMP工作环境
  • go语言学习初探(一)
  • JavaScript学习总结——原型
  • java中的hashCode
  • mysql_config not found
  • Netty源码解析1-Buffer
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • PHP那些事儿
  • Python socket服务器端、客户端传送信息
  • Python十分钟制作属于你自己的个性logo
  • SpringBoot 实战 (三) | 配置文件详解
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue中实现单选
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 回流、重绘及其优化
  • 计算机在识别图像时“看到”了什么?
  • 日剧·日综资源集合(建议收藏)
  • 如何胜任知名企业的商业数据分析师?
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 三栏布局总结
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 通过npm或yarn自动生成vue组件
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 终端用户监控:真实用户监控还是模拟监控?
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Java并发新构件之Exchanger
  • # C++之functional库用法整理
  • #define,static,const,三种常量的区别