shell条件语句

网友投稿 291 2022-11-04

shell条件语句

一,条件测试

1.test命令

测试表达式是否成立,若成立返回0,否则返回其他数值

格式1: test 条件表达式

格式2:[ 条件表达式 ]

[root@localhost ~]# test -e 1.txt | echo $?

0

2.文件测试

[ 操作符 文件或目录 ]

常用的测试操作符

-d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)

-r:测试当前用户是否有权限读取(Read)

-w:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有权限执行(eXcute)

[root@localhost ~]# [ -f 1.txt ] && echo $?

0

[root@localhost ~]# test -e 1.txt | echo $?

0

[root@localhost ~]# [ ! -e /opt/back ] && echo $?

0

##!取反

3.整数值比较

[ 整数1 操作符 整数2 ]

常用的测试操作符

-eq:等于(Equal)

-ne:不等于(Not Equal)

-gt:大于(Greater Than)

-lt:小于(Lesser Than)

-le:小于或等于(Lesser or Equal)

-ge:大于或等于(Greater or Equal)

[root@localhost ~]# [ 9 -gt 5 ] && echo "yes"

yes

[root@localhost ~]# who |wc -l

1

[root@localhost ~]#[ $(who | wc -l) -ge 3 ] && echo "> = 3 "

[root@localhost ~]# echo $?

1

4.字符串比较

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

格式:

[ 字符串1 = 字符串2 ]

[ 字符串1 != 字符串2 ]

格式:

[ -z 字符串 ]

-z:检查字符串是否为空,对未定义或赋予空值的变量视为空串

例:

[root@localhost ~]# echo $LANG

zh_CN.UTF-8

[root@localhost ~]# [ $LANG != "en.US" ] && echo "NOT en.US"

NOT en.US

[root@localhost ~]# read -p "是否覆盖(yes/no)?" ACK

是否覆盖(yes/no)?yes

[root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖"

覆盖

5.逻辑测试

判断两个或多个条件之间的依赖关系,当系统用户取决于多个不同的条件时,根据这些条件是否同时成立或者只要有其中一个成立等情况,需要有一个测试的过程

格式:

[ 表达式1 ] 操作符 [ 表达式2 ]

格式:

命令1 操作符 命令2

常用的测试操作符:

-a或&& : 逻辑与,意思:而且

#只有当前后两个条件都成立时,整个测试命令的返回值才为0;

使用test命令测试时,&& 可改为 -a

-o或|| : 逻辑或,意思:或者

#只要前后两个条件中有一个成立,整个测试命令的返回值即为0;

使用test命令测试时,|| 可改为 -o

! :逻辑否

#只有当指定的条件不成立时,整个测试命令的返回值才为0

例:

[root@localhost ~]#[ -d /opt ] && [ -r /opt ] && echo "exist"

exist

[root@localhost ~]#[ -d /opt ] || [ -r /opt ] && echo "exist"

exist

[root@localhost ~]#[ -d /opt -o -f /opt ] && echo "exist"

exist

例:

[root@localhost ~]#M=$(uname -r | awk -F. '{print $1}')

[root@localhost ~]#S=$(uname -r | awk -F. '{print $2}')

[root@localhost ~]#[ $M -ge 3 ] && [ $S -gt 4 ] && echo "符合要求"

符合要求

二,if语句

1)单分支结构

语句:对于单分支的选择结构,只有在"条件成立"时才会执行相应的代码,否则不执行任何操作。

格式:

if 条件测试操作

then

命令序列

fi

#开头结尾凑成一对,否则语法错误

格式:

if 条件测试操作;then

命令序列

fi

例:

[root@localhost ~]# if [ 2 -gt 1 ]; then echo "ok"; fi

ok

[root@localhost ~]# if [ 2 -gt 1 ]; then \

> echo "yes"

> fi

yes

2)双分支结构

格式:

if 条件测试操作

then

命令序列1

else

命令序列2

fi

例:

判断登录用户是否为管理员

#!/bin/bash

if [ $UID -eq 0 ]

then

echo "当前登录用户是管理员root"

else

echo "当前登录为非管理员"

fi

例:

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

#!/bin/bash

read -p "请输入要创建的用户名:" name

id $name &> /dev/null

if [ $? -eq 0 ]

then

echo "该用户已经存在"

else

useradd $name

echo "123456" | passwd --stdin $name &> /dev/null

echo "已创建用户,初始密码为123456"

fi

3)多分支结构

多分支if语句的结构能够根据多个互斥的条件分别执行不同的操作

格式:

if 条件测试操作1

then

命令序列1

elif 条件测试操作2

then

命令序列2

else

命令序列3

fi

例:

判断文件类型

#!/bin/bash

read -p "请输入要查找的内容:" name

if [ -d $name ]

then

echo "这是一个目录"

elif [ -f $name ]

then

echo "这是一个文件"

else

echo "无法判断文件类别"

fi

4)case多分支结构

case 变量值 in

模式1)

命令序列1

;;

模式2)

命令序列2

;;

*)

默认命令序列

esac

例:成绩等级

#!/bin/bash

read -p "请输入您的分数(1-100):" score

case $score in

8[5-9]|9[0-9]|100)

echo "您的分数为$score,优秀"

;;

7[0-9]|8[0-4])

echo "您的分数为$score,一般般"

;;

[0-9]|[1-6][0-9])

echo "您的分数为$score,30遍"

;;

*)

echo "输入有误,请重新输入"

esac

脚本四步:

需求,命令,变量,语法

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Agate区块链性能总结分享
下一篇:java 实现取int型的第二个字节的数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~