shell 基础知识2 ---条件测试

目录

一、条件测试的基本语法

二、文件测试表达式

三、字符串测试表达式

四、整数测试表达式

五、逻辑操作符

六、实验 


为了能够正确处理 Shell 程序运行过程中遇到的各种情况, Linux Shell 提供了一组测试运算符。 通过这些运算符,Shell 程序能够 判断某种或者几个条件是否成立 。条件测试在各种流程控制语句,例如判断语句和循环语句中发挥了重要的作用,所以,了解和掌握这些条件测试是非常重要的

一、条件测试的基本语法

条件测试语法说明
test  <测试表达式>
test 命令和 < 测试表达式 > 之间至少有一个空格
[  测试表达式  ]
[ ]  边界和内容之间至少有一个空格
[[  测试表达式  ]]
[[ ]]  的边界和内容之间至少有一个空格。 [[]] 中可以使用通配符等进行模式匹配
((测试表达式))
一般用于 if 语句里,双小括号两端不需要有空格,测试对象只能是整数

二、文件测试表达式

常用的文件测试操作符
说明
        -a/-e 文件文件是否存在
        -b 文件
文件是否存在,且为块文件,如果文件存在且是一个块文件,则结果为0
       -c 文件
文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结果为0
        -L 文件
文件存在且为链接文件则为真
        -d 文件
文件存在且为目录则为真,即测试表达式成立
        -f 文件
文件存在且为普通文件则为真,即测试表达式成立
        -s 文件
文件存在且文件大小不为 0 则为真
        -u 文件
文件是否设置 suid 位,如果设置了 suid ,则结果为 0
        -r文件
文件存在且可读为真
        -w 文件
文件存在且可写为真
        -x 文件
文件存在且可执行则为真
f1 -nt f2 nt为 newer than
文件 f1 比文件 f2 新则为真,根据文件的修改时间来计算   stat  文件或目录查看时间
f1 -ot f2 ot older than
文件 f1 比文件 f2 旧则为真,根据文件的修改时间来计算

三、字符串测试表达式

常用字符串测试操作
说明
-n “ 字符串”
若字符串的长度不为 0 ,则为真,即测试表达式成立, n 可以理解为 no zero
-z “字符串”
若字符串的长度为 0 ,则为真, z 可以理解为 zero。可以用来判断是否为空
1”=“ 2”
若字符串 1 等于字符串 2 ,则为真,可使用 == 代替 =
1”!=“ 2”
若字符串 1 不等于字符串 2 ,则为真

四、整数测试表达式

在  [ ]  以及  test  中使用的比较符
在  (( ))  和  [[ ]]  中使用的比较符
说明
-eq==或=相等,equal
-ne!=不相等,not equal
-gt>

大于,greater than

-ge>=大于等于,greater equal
-lt小于,less than
-le<=小于等于,less equal

五、逻辑操作符

在  [ ]   中使用的逻辑操 作符
test [[ ]]  和  (( ))  中使用的逻辑操 作符
说明
-a&&
and ,与,两端都为真,则结果为真
-o||
or ,或,两端有一个为真,则结果为真
!!
not ,非,两端相反,则结果为真

 使用&&等符号的错误示例:&&不能用在 [ ] 中

[root@localhost test3] # [ -f ceshi && -f file ];echo $?
-bash : [: missing `]'
2
[root@localhost test3] # [ -f ceshi || -f file ];echo $?
-bash : [: missing `]'
-bash : -f : command not found
127
使用 && 等符号的正确示例:
[root@localhost test3] # [ -f file ] && [ -f ceshi ];echo $?
1
[root@localhost test3] # [ -f file ] || [ -f ceshi ];echo $?0
[root@localhost test3] # [ -f file ] || [ -d ceshi ];echo $?

六、实验 

实验1: 让用户输入一个文件名,并做如下判断:

1 )如果用户输入的文件为空时显示: you must input a filename ,并中断程序;
2 )如果用户输入的文件不存在时,显示 the file do not exist ,并中断程序;
3 )如果文件存在,判断该文件的文件类型和执行者对该文件所拥有的的权限。
说明:由于 root 在很多权限的限制上面都是无效的,所以使用 root 执行这个脚本时,常常会发现与 ls -l 的结果不相同。所以建议使用一般用户来执行这个脚本
#! /bin/bash
read -p "please input filename:" file
[ -z $file ] && echo "you must input a filename!!!"&& exit
[ ! -e $file ] && echo "the $file do not exit."&& exit
[ -b $file ] && echo "the $file is block" 
[ -d $file ] && echo "the $file is dir" 
[ -f $file ] && echo "the $file is file" 
[ -r $file ] && echo "has a read previlege"
[ -w $file ] && echo "has a write previlege"
[ -x $file ] && echo "has a execute previlege"
[ ! -r $file -a ! -w $file -a ! -x $file ] && echo "is not any previlege"
~              
 测试:

实验2: 通过read传入一个数字,如果传入的数字等于1,就打印1;如果等于2,就打印2,如果不等于1 也不等于2,就提示输入不对,然后退出程序。

实验3:通过read读入两个整数,并比较他们的大小

实验4:选择一个用户输入,判断是root账户还是系统账户还是普通账户 

实验5:给定文件/etc/sos/sos.conf,判断是否存在空白行,若存在则显示行 数,否则显示“无空白行提示信息

下面判断大小时:[ $num -gt 0 ] 可以写成(($num > 0))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值