shell-基础2
Posted liujunjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell-基础2相关的知识,希望对你有一定的参考价值。
条件表达式
文件判断
文件测试操作符
常用文件测试操作符 | 说明 |
-d文件,d的全拼为directory | 文件存在且为目录则为真,即测试表达式成立 |
-f文件,f的全拼为file | 文件存在且为普通文件则为真,即测试表达式成立 |
-e文件,e的全拼为exist | 文件存在则为真,即测试表达式成立。注意区别于“-f”,-e不辨别是目录还是文件 |
-r文件,r的全拼为read | 文件存在且可读则为真,即测试表达式成立 |
-s文件,s的全拼为size | 文件存在且文件大小不为0则为真,即测试表达式成立 |
-w文件,w的全拼为write | 文件存在且可写则为真,即测试表达式成立 |
-x文件,x的全拼为executable | 文件存在且可执行则为真,即测试表达式成立 |
-L文件,L的全拼为link | 文件存在且为链接文件则为真,即测试表达式成立 |
fl -nt f2,nt 的全拼为 newer than | 文件fl比文件f2新则为真,即测试表达式成立。根据文件的修改时间来计算 |
fl -ot f2,ot 的全拼为 older than | 文件fl比文件f2旧则为真,即测试表达式成立。根据文件的修改时间来计算 |
判断文件是否存在
[root@client script]# [ -f /etc/hosts ]
[root@client script]# echo $?
0
[root@client script]# [ -f /etc/hosts1 ]
[root@client script]# echo $?
1
判断文件是否存在,返回方式
[root@client ~]# [ -f /etc/hosts ] && echo "文件存在" || echo "文件不存在"
文件存在
[root@client ~]# [ -f /etc/hosts1 ] && echo "文件存在" || echo "文件不存在"
文件不存在
判断目录是否存在
[root@client ~]# [ -d /tmp ] && echo "目录存在" || echo "目录不存在"
目录存在
[root@client ~]# [ -d /tmp1 ] && echo "目录存在" || echo "目录不存在"
目录不存在
使用变量的方法进行判断
[root@client ~]# dir=/etc1/;[ -d $dir ] && tar zcf etc.tar.gz $dir || echo "$dir目录不存在"
/etc1/目录不存在
字符串判断
字符串测试操作符
常用字符串测试操作符 | 说明 |
-n "字符串" | 若字符串的长度不为0,则为真,即测试表达式成立,n可以理解为no zero |
-Z "字符串" | 若字符串的长度为0,则为真,即测试表达式成立,z可以理解为zero的缩写 |
"串 1"== "串 2" | 若字符串1等于字符串2,则为真,即测试表达式成立,可使用"=="代替"=" |
"串 1" != "串 2" | 若字符串1不等于字符串2,则为真,即测试表达式成立,但不能用"!=="代替"!=" |
1.对于字符串的测试,一定要将字符串加双引号之后再进行比较。 2.空格非空 |
-z 判断字符串长度
[root@client ~]# x= ; [ -z "$x" ] && echo "输入为空" || echo ‘输入有内容‘
输入为空
[root@client ~]# x=1 ; [ -z "$x" ] && echo "输入为空" || echo ‘输入有内容‘
输入有内容
-n 判断字符串长度
[root@client ~]# x=12 ; [ -n "$x" ] && echo "输入有内容" || echo ‘输入为空‘
输入有内容
[root@client ~]# x= ; [ -n "$x" ] && echo "输入有内容" || echo ‘输入为空‘
输入为空
"串 1" == " 串 2 " 使用定义变量的方式进行判断
[root@client ~]# cmd=start;[ "$cmd" == "start" ] && echo start
start
整数判断
整数二元比较操作符参考
在[]以及test中 | 在(())和[[]]中 | 说明 |
使用的比较符号 | 使用的比较符号 | |
-eq | ==或= | 相等,全拼为equal |
-ne | != | 不相等,全拼为not equal |
-gt | > | 大于,全拼为greater than |
-ge | >= | 大于等于,全拼为greater equal |
-lt | < | 小于,全拼为丨ess than |
-le | <= | 小于等于,全拼为less equal |
判断两数是否相等
[root@client ~]# [ 1 -eq 1 ]
[root@client ~]# echo $?
0
[root@client ~]# [ 1 -eq 2 ]
[root@client ~]# echo $?
1
大于等于
[root@client ~]# [ 11 -ge 1 ] && echo "成立" || echo "不成立"
成立
小于
[root@client ~]# [ 11 -lt 1 ] && echo "成立" || echo "不成立"
不成立
大于
[root@client ~]# [ 11 -gt 1 ] && echo "成立" || echo "不成立"
成立
不等于
[root@client ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立
逻辑符号
在[]和test中使用的操作符 | 说明 | 在[[]]和中使用的操作符 | 说明 |
-a |
[ 条件A -a 条件B ] A与B都要成立,整个表达式才成立 |
&& | and,与,两端都为真,则结果为真 |
-o |
[ 条件A -o 条件B] A与B都不成立,整个表达式才不成立 |
|| |
or,或,两端有一个为真,则结果为真 |
! | ! | not,非,两端相反,则结果为真 |
逻辑操作符与整数判断配合
[root@client ~]# [ 11 -ne 1 ] && echo "成立" || echo "不成立"
成立
取反
[root@client ~]# [ ! 11 -ne 1 ] && echo "成立" || echo "不成立"
不成立
两边都为真
[root@client ~]# [ 11 -ne 1 -a 1 -eq 1 ] && echo "成立" || echo "不成立"
成立
至少有一边为真
[root@client ~]# [ 11 -ne 1 -o 1 -eq 1 ] && echo "成立" || echo "不成立"
成立
感叹号的特殊用法
使用历史命令,感叹号加上history中的序号,即可执行
[root@client ~]# !38
echo $?
0
以上是关于shell-基础2的主要内容,如果未能解决你的问题,请参考以下文章