Shell Script条件判断详解

 更新时间:2024年09月19日 10:04:46   作者:幽月静语  
ShellScript中,命令执行后的返回状态可以用于条件判断,其中0表示成功,1-255表示失败,重定向操作允许控制命令输出,包括覆盖和追加方式,逻辑操作符&&和||用于根据命令状态执行逻辑判断,IF语句则是基于命令的执行结果来分支执行不同的代码块,支持if、elif和else关键字

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

到此这篇关于Shell Script条件判断的文章就介绍到这了,更多相关Shell Script条件判断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux du命令实现根据文件或者文件夹大小排序输出

    Linux du命令实现根据文件或者文件夹大小排序输出

    Linux是一个强大的操作系统,广泛用于服务器和个人计算机,本文主要来和大家聊聊如何利用du命令实现根据文件或者文件夹大小排序输出,感兴趣的可以了解下
    2023-09-09
  • Shell脚本until语法结构的具体使用

    Shell脚本until语法结构的具体使用

    本文主要介绍了Shell脚本-until语法结构的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • nginx多server日志分割脚本分享

    nginx多server日志分割脚本分享

    这篇文章主要介绍了nginx多server日志分割脚本,需要的朋友可以参考下
    2014-04-04
  • 如何写出安全的、基本功能完善的Bash脚本

    如何写出安全的、基本功能完善的Bash脚本

    这篇文章主要介绍了如何写出安全的、基本功能完善的Bash脚本,帮助大家更好的理解和使用bash shell,感兴趣的朋友可以了解下
    2020-12-12
  • 使用shell脚本来给mysql加索引的方法

    使用shell脚本来给mysql加索引的方法

    今天小编就为大家分享一篇关于使用shell脚本来给mysql加索引的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • 使用pwgen命令在Linux中创建随机密码的方法

    使用pwgen命令在Linux中创建随机密码的方法

    在Linux系统中,pwgen是一个十分便捷的命令行工具,用于生成随机密码,pwgen能够以简单易用的方式生成满足特定需求的密码,包括长度、字符类型等,接下来我们将深入了解这个工具的功能和使用方法,需要的朋友可以参考下
    2024-05-05
  • shell脚本5种执行方式及脚本不同的执行方法和区别详解

    shell脚本5种执行方式及脚本不同的执行方法和区别详解

    我们都知道bash shell 脚本的方法有多种,下面这篇文章主要给大家介绍了关于shell脚本5种执行方式及脚本不同的执行方法和区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Shell脚本获取国内各大运营商网段脚本分享

    Shell脚本获取国内各大运营商网段脚本分享

    这篇文章主要介绍了Shell脚本获取国内各大运营商网段脚本分享,本文使用亚太地区网络信息记录作为数据源,然后使用Shell脚本分析国内的网段,需要的朋友可以参考下
    2014-12-12
  • Shell脚本判断用户的输入内容

    Shell脚本判断用户的输入内容

    今天小编就为大家分享一篇关于Shell脚本判断用户的输入内容,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Bash Shell中双引号中的感叹号问题小结

    Bash Shell中双引号中的感叹号问题小结

    当你在双引号中使用感叹号时,如果你在双引号中直接使用感叹号,它可能会被解释为历史扩展的一部分,这篇文章主要介绍了Bash Shell中双引号中的感叹号问题小结,需要的朋友可以参考下
    2024-03-03

最新评论