退出与测试

在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 ~]#