Shell 从入门到精通系列 (第二章 Shell条件测试)

网友投稿 610 2022-09-20

Shell 从入门到精通系列 (第二章 Shell条件测试)

Shell 从入门到精通系列 (第二章 Shell条件测试)

本章内容:

​条件测试: 主要介绍shell程序中的文件,变量,字符串数值,以及逻辑等条件测试​​条件判断语句: 介绍基本的if,if else,以及if elif语句的使用方法​​多条件判断语句case: 主要介绍case语句的基本语法,以及使用case语句来解决一些实际问题​​运算符: 介绍shell中常用的运算符的使用方法,例如 算术运算符,位运算符,自增,自减运算符

​条件测试:

​条件测试的基本语法:​

在shell程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或者假,当指定的条件为真时,整个条件测试的返回值为0;反之,如果条件为假时,则条件测试的返回值为非0

​条件测试的两个内部命令​

​3.字符串测试

​在shell中,用户可以通过5中运算符来对字符串进行操作

运算符

 说明

string

判断指定的字符串是否为空

-z string

判断字符串是否为空字符串

string1 != string2

判断两个字符串是否不相等

-n string

判断字符串是否为空字符串

string1 = string2

判断指定的两个字符串是否相等

说明: 在以上这5中运算符中,除了string只能使用test进行测试之外,其他的4中可以分别使用test和[ 来进行测试

​案例1:​

测试字符串是否为空#定义一个变量:[root@django ~]# a='abc'#用test变量测试字符串是否为空[root@django ~]# test $a#输出结果为0,表示变量a不为空[root@django ~]# echo $?0#用-n测试变量a是否不为空[root@django ~]# test -n "$a"#结果为0,说明变量a不为空[root@django ~]# echo $?0#用-z测试变量a是否为空[root@django ~]# test -z "$a"#结果为1,说明变量a不为空[root@django ~]# echo $?[root@django ~]# 1

​案例2:​

测试两个字符串:#定义变量a[root@django ~]# a="hello"#定义变量b[root@django ~]# b="world"#比较两个字符串是否相等[root@django ~]# [ "$a" = "$b" ]#输出测试结果为1,表示$a和$b不相等[root@django ~]# echo $?1#测试$a和$b是否不相等[root@django ~]# test "$a" != "$b"#结果为0,说明$a和$b不相等[root@django ~]# echo $?0

​案例3:

​空格对字符串测试的影响在实际操作中会遇到字符串有空格的情况#定义变量a[root@django ~]# a='Hello world '#定义变量b[root@django ~]# b='Hello world'#测试变量a与变量b是否相等[root@django ~]# [ "$a" = "$b" ][root@django ~]# echo $?1分析: 由于变量a末尾有一个空格,所以两个变量值不相等

​案例4:

​字母大小写对字符串测试的影响#定义变量a[root@django ~]# a='Hello world'#定义变量b[root@django ~]# b='hello world'#由于变量b中h为小写,所以两个变量值不相等[root@django ~]# [ "$a" = "$b" ][root@django ~]# echo $?1

​案例5:

​运算符两边必须要保留空格#定义变量a[root@django ~]# a="Apple"#定义变量b[root@django ~]# b="Orange"#由于=号两边没有空格,所以表达式会变为: test "Apple=Orage",变成了测试某个字符串是否为空,所以结果为真[root@django ~]# test "$a"="$b"[root@django ~]# echo $?0

4.整数测试

​整数测试也有两种形式:test num1 op num2或者[ num1 op num20 ]其中 num1 和 num2是参与比较的两个整数,可以是常量或者变量, op表示运算符

常见的整数运算符

运算符

说明

num1  -gt num2

比较num1是否大于num2

num1  -lt num2

比较num1是否小于num2

num1  -ge num2

比较num1是否大于等于num2

num1  -le num2

比较num1是否小于等于num2

num1 -eq num2

比较num1是否等于num2,如果相等,测试结果为0

num1 -ne num2

比较num1 和num2是否不相等,如果num1和num2不相等,测试结果为0

​案例1:

​案例2:

比较10大于20 ,10小于20

​案例3:

​案例4:

特别提示1:

特别提示2:

5.文件测试

​文件测试主要是判断文件是否存在,文件是否可读写

文件测试语法:

test op file 或者 [ op file ] ,其中op表示操作符,file表示要测试的文件名

常用的文件操作符:

操作符

说明

-a file

判断文件是否存在

-b file

文件是否存在,且为块文件

-c file

文件是否存在,且为字符文件

-d file

文件是否存在,且为目录

-e file

同 -a file

-x file

文件是否存在 且可执行

-s file

文件的长度是否大于0,或者文件为非空文件

-L file

文件是否存在且为符号链接文件

-r file

文件是否存在 且为可读

-u file

文件是否设置suid位

-f file

文件存在,且为常规文件

-w file

文件是否存在且为科协

从以上表格可以分析: 文件操作符的功能主要是检测文件是否存在,文件的类型,以及文件的访问权限

​案例1:

#判断文件是否存在[root@django ~]# test -a abc.txt[root@django ~]# echo $?0[root@django ~]# [ -a file3 ][root@django ~]# echo $?1#判断文件是否为目录[root@django ~]# test -d dir1[root@django ~]# echo $?1#判断文件是否为常规文件[root@django ~]# test -f abc.txt[root@django ~]# echo $?0#判断文件是否为非空文件[root@django ~]# test -s abc.txt[root@django ~]# echo $?0#判断文件是否我块文件[root@django ~]# test -b file1[root@django ~]# echo $?1#判断/dev/sda是否为块文件[root@django ~]# test -b /dev/sda[root@django ~]# echo $?0#判断/dev/tty是否为字符文件[root@django ~]# test -c /dev/tty[root@django ~]# echo $?0

​案例2:

​判断文件的权限#判断文件是否可写[root@django ~]# test -w abc.txt[root@django ~]# echo $?0#判断文件是否可读[root@django ~]# test -r abc.txt[root@django ~]# echo $?0#判断文件是否可执行[root@django ~]# test -x abc.txt[root@django ~]# echo $?1#设置文件的setuid权限,然后判断[root@django ~]# ll abc.txt-rwxr-xr-x 1 root root 3 Feb 20 14:51 abc.txt[root@django ~]# chmod u+s abc.txt[root@django ~]# ll abc.txt-rwsr-xr-x 1 root root 3 Feb 20 14:51 abc.txt[root@django ~]# test -u abc.txt[root@django ~]# echo $?0

​6.逻辑操作符

​前面介绍的字符串测试,整数测试,以及文件测试都是提供了一个测试条件. 而在shell中,经常遇到同时判断多个条件的情况,这个时候就要用到逻辑操作符

常用的逻辑操作符:

操作符

说明

!expression

逻辑非,expression的条件为真时,结果为假

expression1 -o expression2

逻辑或,两个条件只要有一个为真,则结果为真

expression1 -a expression2

逻辑与,两个条件都为真时,结果为真

​案例1:

[root@django ~]# a=35[root@django ~]# test "$a" -gt 20 -a "$a" -lt 60[root@django ~]# echo $?0[root@django ~]#

​案例2:

​判断当前用户对某个文件是否有写入权限[root@django ~]# [ -e file1 -a -w file1 ][root@django ~]# echo $?1

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

上一篇:2018 年回顾:Memcache 和 Drupalgeddon
下一篇:C# 基础知识系列- 8 Linq最后一部分查询表达式语法实践(cctv5体育节目表)
相关文章

 发表评论

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