Shell Script条件判断详解

Shell Script条件判断详解

Shell Script条件判断

一、Shell 状态和重定向

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

​ 命令的执行结果

​ 命令的执行状态

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

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

​ 命令返回状态为0:真

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

​ 输出重定向

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

​ ①覆盖输出重定向:

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

​ ②追加输出重定向:

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

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

# 错误覆盖输出[root@localhost ~]# ls /opt/myfile abc.txt# 查看内容[root@localhost ~]# cat abc.txtls: 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 directoryls: 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/bashif [ $# -eq 1 ]; then echo "接收到一个参数,他是$1"elif [ $# -ge 2 ]; then echo "接受到的参数大于等于2个,第二个参数为:$2"else echo "没有接收到参数!!!" exit 1fi# 不传递参数[root@localhost ~]# bash myshell.sh没有接收到参数!!!# 传递一个参数[root@localhost ~]# bash myshell.sh abc接收到一个参数,他是abc# 传递两个参数[root@localhost ~]# bash myshell.sh abc abcd接受到的参数大于等于2个,第二个参数为:abcd

Shell Script条件判断详解