退出与测试
在linux中,每个命令或者脚本完成后都会有一个退出状态:
在shell中有一个内部命令test命令用于判断语句进行测试一种或者几种状态条件是否成立
#退出状态,测试和判断密切相关
退出状态:
当命令执行成功后,系统会返回一个退出状态,这个状态由数值表示,判断命令是否正确执行,若退出状态为0,表示命令执行成功,若为其他数值,则表示运行失败
查看状态码用 $?
状态码 含义
0 代表运行成功,程序执行ok
1-125 代表执行失败,脚本,命令,系统命令或传递参数失败
126 找到了命令但无法执行
127 没找到命令
>128 命令被系统强制结束
ls;echo $?
测试结构
测试命令用于测试表达式的条件的真假,如果条件为真,则返回0,
如果条件为假,则返回一个非0数值
#测试结构语法
第一种:
test expression
expression为表达式,该表达式可以是数字,字符串,文本,文件属性的比较
第二种:
[ expression ]
expression为表达式
[ 代表测试启动
表达式与[]俩边必须有空格,
这种方法经常与if,Case,while等语句连用
整数比较运算符
主要用于俩个值的比较,比较简答
#测试结构
test 'num' 整数比较运算符 ‘num’
或:
[ ‘num’ 整数比较运算符 ‘num’ ]
#常用运算符
num1 -eq num2 如果num1等于nunm2,测试结果为0
num1 -ge num2 如果num1大于等于num2,测试结果为0
num1 -gt num2 如果num1大于num2,测试结果为0
num1 -le num2 如果num1小于等于num2,测试结果为0
num1 -lt num2 如果num1小于num2,测试结果为0
num1 -ne num2 如果num1不等于num2,测试结果为0
#一个整数与一个整数常量的比较
[root@localhost ~]# num=15
[root@localhost ~]# [ "$num" -eq 15 ];echo $?
0
[root@localhost ~]# [ "$num" -gt 10 ];echo $?
0
[root@localhost ~]# [ "$num" -gt 20 ];echo $?
1
[root@localhost ~]# [ "$num" -lt 15 ];echo $?
1
#俩个变量作比较
[root@localhost ~]# first_num=99
[root@localhost ~]# second_num=100
[root@localhost ~]# [ "$first_num" -gt "$second_num" ];echo $?
1
[root@localhost ~]# [ "$first_num" -lt "$second_num" ];echo $?
0
#注意:整数比较运算符不适用与浮点型数值比较,这一点与C语言区别
[root@localhost ~]# [ 1.5 -lt 2.2 ];echo $?
-bash: [: 1.5: integer expression expected
2
字符串运算符
字符串运算符可以用来测试字符串是否为空,俩个字符串是否想等或者不相等,
主要用来测试用户用户输入是否为空或者判断计较字符串变量;
#字符串运算符总共有5种
#注意,字符串运算符只能使用test,不能使用[]这种格式
#俩个字符串进行比较时,变量也用双引号引起来,变量为空也得用双引号
string 测试字符串是否不为空
-n string 测试字符串是否不为空(为空等于长度为0)
-z string 测试字符串string是否为空
string1=string2 测试字符串是否相等
string!=string2 测试字符串是否不相等
[root@localhost Desktop]# str1="";test "$str1";echo $?
1
[root@localhost Desktop]# str1="7";test "$str1";echo $?
0
[root@localhost Desktop]# test -n "$str1";echo $?
0
[root@localhost Desktop]# test -z "$str1";echo $?
1
[root@localhost Desktop]#
[root@localhost Desktop]# str1="vi"
[root@localhost Desktop]# str2="vim"
[root@localhost Desktop]# [ "$str1" = "$str2" ];echo $?
1
[root@localhost Desktop]# [ "$str1" != "$str2" ];echo $?
0
[root@localhost Desktop]#
[root@localhost Desktop]# str="hello "
[root@localhost Desktop]# [ "$str" = "hello" ];echo $?
1
[root@localhost Desktop]# str="hello"
[root@localhost Desktop]# [ "$str" = "HELLO" ];echo $?
1
num="007" #给变量赋值,可以当作整数,也可以当作字符串
[ "$num" -eq "7" ];echo $? #测试变量num是否等于整数7
[ "$num" = "7" ];echo $? #测试变量num的值是否等于字符串7
文件操作符
可以完成测试文件的各种操作
格式:
test file_operator file
或:
[ file_operator file ]
#常用的文件操作符
-d file #测试file是否是目录
-e file #测试file是否存在
-f file #测试file是否是普通文件
-r file #测试file是否可读
-s file #测试file是否不为空
-w file #测试file是否可写
-x file #测试file是否是可执行文件
-h file #测试file是否是链接文件
[root@localhost ~]# [ -e xasxa ] && echo "Y" || echo "N" && echo $?
N
0
[root@localhost ~]#
[root@localhost ~]# [ -f /etc/passwd ] && echo "Y" || echo "N"
Y
[root@localhost ~]# [ -f /etc/passwds ] && echo "Y" || echo "N"
N
[root@localhost ~]#
[root@localhost ~]# test -d /etc/ && echo "Y" || echo "N"
Y
[root@localhost ~]#
逻辑运算符
逻辑运算符用于测试多个条件是否为真为假,或使用逻辑非运算测试单个表达式
逻辑非,逻辑与,逻辑或
! expression #如果expression,整个测试结果为真
expression1 -a expression2 #同时为真则为真
expression -o expression2 #有真则真
[root@localhost ~]# [ -e initial-setup-ks.cfg ];echo $?
0
[root@localhost ~]# [ ! -e initial-setup-ks.cfg ];echo $?
1
[root@localhost ~]# [ -e initial-setup-ks.cfg -a -x anaconda-ks.cfg ];echo $?
1
[root@localhost ~]#
[root@localhost ~]# num=15
[root@localhost ~]# [ "$num" -lt 20 -o "$num" -gt 30 ];echo $?
0
[root@localhost ~]#