Linux - shell脚本之条件判断相关

一、按照文件类型进行判断

两种判断格式
1、test -e /root/install.log
2、[ -e /root/install.log ]

注意:[ -e /root/install.log ],左中括号和紧挨着的字符之间,有空格;右中括号与紧邻的字符之间,有空格。
示例
[root@192 cut]# cat score.txt
Id	Name	Gender	Score
1	zhangsan	M	90
2	lisi	M	88
3	wangwu	M	98
4	zhaoliu	N	97
5	NangongYi	M	100
实例:测试score.txt文件是否存在
[root@192 cut]# test -e score.txt
[root@192 cut]#
哎,怎么没结果?别急,往下看:
[root@192 cut]# echo $?
0
[root@192 cut]#
知识点:$?表示上一条命令执行是否正确!0表示正确,非0表示不正确。
实例:测试一个不存在的文件看看。
[root@192 cut]# test -e sss.txt
[root@192 cut]# echo $?
1
[root@192 cut]#
那,这个每次都得用$?查看,是不是,特别不方便?有没有好的方法么?
【“条件” && echo “yes” || echo “no”】,表示,如果条件成立,输出yes,如果不成立,返回no。
实例:判断root目录是否存在,存在返回“yes”,不存在返回“no”.
[root@192 cut]# [ -d /root ] && echo "yes" || echo "no"
yes
[root@192 cut]#
实例:判断score.txt文件是否存在,存在返回“yes”,否则,返回“no”.
[root@192 cut]# [ -f ./score.txt ] && echo "yes" || echo "no"
yes
[root@192 cut]#
实例:判断一个不存在的文件,看返回的结果是什么?
[root@192 cut]# [ -f ./score.txt.bak ] && echo "yes" || echo "no"
no
[root@192 cut]#

二、按照文件权限进行判断

实例:判断score.txt文件是否有写权限
[root@192 cut]# ls -l
总用量 4
-rw-r--r--. 1 root root 101 10月 21 01:04 score.txt
[root@192 cut]#

[root@192 cut]# [ -w ./score.txt ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#

[root@192 cut]# [ -r ./score.txt ] && echo 'yes' || echo 'no'
Yes

[root@192 cut]# [ -x ./score.txt ] && echo 'yes' || echo 'no'
no
[root@192 cut]#

三、两个文件之间进行比较

注意:判断两个文件是否相等,判断的是,文件的Inode号是否一样。
[root@192 cut]# mkdir ying
[root@192 cut]#
[root@192 cut]# ls
score.txt  ying
[root@192 cut]# ln ./score.txt ./ying/se.txt
[root@192 cut]# ls
score.txt  ying
[root@192 cut]# cd ying/
[root@192 ying]# ls
se.txt
[root@192 ying]# cd ..
[root@192 cut]# ls
score.txt  ying
[root@192 cut]# [ ./score.txt -ef ./ying/se.txt ] && echo "yes" || echo "no"
yes
[root@192 cut]#

四、两个整数之间的比较

实例:比较23是否等于32?
[root@192 cut]# [ 23 -eq 32 ] && echo 'yes' || echo 'no'
no
[root@192 cut]#
实例:比较23是否不等于32?
[root@192 cut]# [ 23 -ne 32 ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#
实例:比较23是否大于等于32?
[root@192 cut]# [ 23 -ge 32 ] && echo 'yes' || echo 'no'
no
[root@192 cut]#
实例:比较23是否大于32?
[root@192 cut]# [ 23 -gt 32 ] && echo 'yes' || echo 'no'
no
[root@192 cut]#
实例:比较23是否小于等于32?
[root@192 cut]# [ 23 -le 32 ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#
实例:比较23是否小于32?
[root@192 cut]# [ 23 -lt 32 ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#

五、字符串的判断

实例:-z相关操作,判断一个变量是否为空
[root@192 cut]# name=LDR
[root@192 cut]# [ -z "$name" ] && echo 'yes' || echo 'no'
no
[root@192 cut]#
[root@192 cut]# name=''
[root@192 cut]# [ -z "$name" ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#
实例:-n相关操作,判断一个变量是否为空
[root@192 cut]# age=''
[root@192 cut]# [ -n "$age" ] && echo 'yes' || echo 'no'
no
[root@192 cut]#
[root@192 cut]# age=18
[root@192 cut]# [ -n "$age" ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#
注意:“==”表示对字符串的判断!
实例:赋值两个变量,进行比较,等于和不等于
-等于
[root@192 cut]# num1=abc
[root@192 cut]# num2=bcd
[root@192 cut]#
[root@192 cut]# [ "$num1"==“$num2” ] && echo 'yes' || echo 'no'
yes

什么情况?明明不一样,那为什么会是“yes”? 原因在于双等号的左右两边没有空格,这里一定要有空格!更改:
[root@192 cut]# [  "$num1"  == “$num2” ] && echo 'yes' || echo 'no'
no
[root@192 cut]#

注意:“==”的左右两边一定要有空格!!
-不等于

[root@192 cut]# no1=hello
[root@192 cut]# no2=hello
[root@192 cut]# [ "$no1" != "$no2" ] && echo 'yes' || echo 'no'
no
[root@192 cut]#

[root@192 cut]# nun=hello
[root@192 cut]# nuu=hell0
[root@192 cut]# [ "$num" != "$nuu" ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#

六、多重条件判断

实例:aa赋值11,判断aa是否有值,同时判断aa是否大于23
[root@192 cut]# aa=11
[root@192 cut]# [ -n "$aa" -a "$aa" -gt 23 ] && echo 'yes' || echo 'no'
no
[root@192 cut]#
实例:aa赋值24,判断aa是否有值,同时判断aa是否大于23
[root@192 cut]# aa=24
[root@192 cut]# [ -n "$aa" -a "$aa" -gt 23 ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#
实例:num赋值为55,判断非num是‘yes’还是‘no’
[root@192 cut]# num=55
[root@192 cut]#
[root@192 cut]# [ ! "$num" ] && echo 'yes' || echo 'no'
no
[root@192 cut]#
注解:num是55,真;!num,非真,即假。真,yes;假,no。输出假,no。
[root@192 cut]# no=''
[root@192 cut]# [ ! "$no" ] && echo 'yes' || echo 'no'
yes
[root@192 cut]#
注解:no为空,假;!no,非假,即真。真yes;假,no。输出真,yes。
发布了59 篇原创文章 · 获赞 2 · 访问量 5567

猜你喜欢

转载自blog.csdn.net/LDR1109/article/details/102958705