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: 没有那个文件或目录
2021年 06月 03日 星期四 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编程之条件语句——条件测试的主要内容,如果未能解决你的问题,请参考以下文章