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

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/bash

file="/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 ]; then
    echo "接收到一个参数,他是$1"
elif [ $# -ge 2 ]; then
    echo "接受到的参数大于等于2个,第二个参数为:$2"
else
    echo "没有接收到参数!!!"
    exit 1
fi


# 不传递参数
[root@localhost ~]# bash myshell.sh
没有接收到参数!!!

# 传递一个参数
[root@localhost ~]# bash myshell.sh abc
接收到一个参数,他是abc

# 传递两个参数
[root@localhost ~]# bash myshell.sh abc abcd
接受到的参数大于等于2个,第二个参数为:abcd

http://www.kler.cn/news/310256.html

相关文章:

  • 传输层——UDP协议
  • CentOS 上配置多服务器 SSH 免密登录
  • 【oj刷题】二分查找篇:二分查找算法的原理和应用场景
  • 滤波器的分类
  • PM2.5粉尘传感器详解(STM32)
  • 记录一下ElementUI 3 在浏览器导入, table表格显示问题
  • 笔记:简介Drawing是什么,都有哪些,如何使用
  • 前后端联调
  • 如何建立一个Webservice WSDL的简单例子(完整例子)
  • 如何在微信小程序中实现WebSocket连接
  • JEE 设计模式
  • 黑神话悟空mac可以玩吗
  • 软考高级:嵌入式系统调度算法 AI 解读
  • OJ 组合总和
  • MySQL面试题--连续三天登录(困难)
  • Python基础(七)——PyEcharts数据分析(面向对象版)
  • fortran定义数组
  • [SAP ABAP] 修改内表数据
  • HDMI色块移动——FPGA学习笔记13
  • VulhubDC-4靶机详解
  • Linux系统性能调优技巧详解
  • 『功能项目』回调函数处理死亡【54】
  • docker基础学习
  • C++调用C# DLL之踩坑记录
  • Oracle 数据库安装和配置教程
  • 每日学习一个数据结构-红黑树
  • 电脑怎么录屏?四款录屏工具分享
  • C++ | Leetcode C++题解之第416题分割等和子集
  • python简单易懂的lxml读取HTML节点及常用操作方法
  • 前端大模型入门:掌握langchain的核心Runnable接口(一)