Shell编程之条件语句——条件测试

Posted 可乐卷儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程之条件语句——条件测试相关的知识,希望对你有一定的参考价值。

一、条件测试

测试表达式是否成立,若成立返回0,否则返回其他数值;包含以下测试类型

  • 字符串测试
  • 文件测试
  • 整数测试
  • 逻辑测试

条件测试固定格式如下:

格式1   test 条件表达式
格式2   [ 条件表达式 ]  #条件表达式与方括号直接至少有一个空格,每个字符也要有空格

实例:
格式1
test a == b相当于a=b
test a != b相当于a≠b
在这里插入图片描述
格式2
[ a == b ]
在这里插入图片描述

1、字符串测试

1.1、字符串比较固定格式

通常用来检查用户输入、系统环境等是否满足条件,在提交交互式操作的shell脚本中,也可用来判断用户输入的位置参数是否符合要求
格式1

[ 字符串1 = 字符串2 ]  # =:相同
[ 字符串1 != 字符串2 ]  # != :不相同,其中“!”符号表示取反

格式2

[ -z 字符串 ]               #常用于检测变量是否为空 
-z:检测字符串是否为空,空格算空
-n:检测字符串是否为非空,空格也算非空

1.2、与&&、||、“”结合使用

&&||结合使用:不按主次,按照先后顺序执行;哪个满足执行哪个
&&:前面对的结果执行后面,前面不对也不执行后面
||:前面对的结果不执行后面;前面错的结果执行后面

格式1实例1:

[root@klj ~]# ls xxx && date  
ls: 无法访问xxx: 没有那个文件或目录
[root@klj ~]# ls xxx || date
ls: 无法访问xxx: 没有那个文件或目录
20210603日 星期四 23:07:58 CST

格式1实例2:

[root@klj ~]# [ a == b ] && echo y || echo n
n
[root@klj ~]# [ a != b ] && echo y || echo n
y

格式2实例1:

[root@klj ~]# [ -z $a ] && echo y || echo n
n
[root@klj ~]# [ -n $a ] && echo y || echo n
y

注意点,-n在检测变量是否有空格符时,也是非空,空格也是字符哦,不要忘记了
在这里插入图片描述

以变量a为例
不加双引号;直接输出$a,是非空的
加上双引号;相当于输出调用变量a的结果是空的

实例

[root@klj ~]# [ -n $a ] && echo y || echo n
y
[root@klj ~]# [ -n "$a" ] && echo y || echo n
n

分号 “;” 前后没有逻辑关系,挨个执行

[root@klj ~]# [ a == b ]; echo y
y
[root@klj ~]# [ a != b ]; echo n
n

2、文件测试

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否存在,是否可读、可写、可执行等等

固定格式

[ 操作符 文件或目录 ]

常见的操作符选项

-d: 测试是否为目录(Directory)  
-f: 测试是否为文件(File) 
-e:测试目录或文件是否存在(Exist) 
-L: 测试是否为链接文件
-b:测试是否为设备文件
-C:测试是否为字符设备文件
-r: 测试当前用户是否有权限读取(Read)  
-W:测试当前用户是否有权限写入(Write) 
-x:测试是否设置有可执行(Excute) 权限 
-s:测试存在且文件大小为空

在这里插入图片描述

3、整数值比较

指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数
整数值比较常用操作选项如下,使用时将操作选项放在要比较的两个整数之间

-eq:第一个数等于(Equal) 第二个数
-ne: 第一个数不等于(Not Equal) 第二个数
-gt: 第一个数大于(Greater Than) 第二个数
-lt: 第一个数小于(Lesser Than)第二个数
-le: 第一个数小于或等于(Lesser or Equal) 第二个数
-ge:第一个数大于或等于(Greater or Equal) 第二个数

实例
在这里插入图片描述
在这里插入图片描述

4、逻辑测试

指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件是,判断是根据这些条件同时成立还是只要有其中一个成立等情况,需要有一个测试的过程;
常用的逻辑测试操作如下:

-a或&&  #逻辑与,而且的意思;同时为真才为真,其余都是假
-o或|| :逻辑或,或者的意思;同时为假才为假,其余都是真
!:逻辑否

固定格式

格式1[ 表达式1 ]  操作符 [ 表达式2  ]  ...
格式2 : 命令1 操作符 命令2 ...

常用的三种写法

  • 且或写在方括号“[ ]”内
[root@klj ~]# [ 5 -lt 6 -a 6 -lt 7 ] && echo y || echo n
y
  • 与“&&”和“||”结合使用,“&&”和“||”需写在方括号“[ ]” 外
[root@klj ~]# [ 5 -lt 6 ] && [ 6 -lt 7 ] && echo y || echo n
y
  • 若想要把"&&“和”||“写在方括号“[ ]”,需要使用双方括号”[[ ]]"
[root@klj ~]# [[ 5 -lt 6 && 6 -lt 7 ]] && echo y || echo n
y

二、练习题

  • 判断目标主机是否存活,存活就打印is up,如果不存活就打印is down

创建一个脚本文件 ip.sh

#!/bin/bash
read -p "请输入ip:" ip
ping -c 3 $ip &> /dev/null
if [ $? -eq 0 ];then
        echo "$ip is up"
else
        echo "$ip is down"
fi

验证
在这里插入图片描述

  • 判断当前登陆用户是否是管理员

创建一个脚本文件user3.sh

#!/bin/bash
#判断当前登录用户是否是管理员
#!/bin/bash
read -p "请输入用户名:" user
id $user &> /dev/null
if [ $? -eq 0 ]
        then
                echo "是管理员"
else
                echo "不是管理员"
fi

验证
在这里插入图片描述

  • 判断输入的用户名是否存在,存在提示已存在,不存在则创建用户并设置密码

创建一个脚本文件 user2.sh

#!/bin/bash
read -p "请输入用户名:" user
cat /etc/passwd | grep -q $user
if [ $? -eq 0 ]
        then
                echo "用户已存在"
        else
read -p "请创建新的用户名:" user
read -p "请输入密码:" pass
useradd $user
echo "$pass" | passwd --stdin $user
fi

验证在这里插入图片描述

以上是关于Shell编程之条件语句——条件测试的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程之条件语句

shell编程之条件语句

shell编程之条件语句

Shell编程之条件语句

Shell编程之条件语句

Shell编程之条件语句——条件测试