怎样在小程序里实现标题的更改
610
2022-09-20
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~