四天精通shell编程(三)
admin
2023-02-04 05:20:05
0

条件测试


test 测试条件 测试内容

[测试条件 测试内容] #用的更为广泛


1 测试文件类型


test -e 文件名 测试文件是否存在,存在为真

[ -e 文件名 ] 注意:[]的左右两侧必须加空格!


附:test测试结果并不显示,需用echo$? 来显示test的返回值

返回0语句正确,非0表示不正确。

拓展:test-e test.txt && echo Yes || echo No

test -f 文件名 判断是否是普通文件#如果是文件的话,返回0,若是目录返回非0

test -d 文件名 判断是否为目录

test -b 文件名 判断是否为块设备文件

test -c 文件名 字符设备文件


2 测试文件权限


test -r 文件名 判断是否有可读权限

test -w 文件名 可写

test -x 文件名 执行

test -s 文件名 判断是否为非空白,有内容为真


3 两个文档比较


[file1 -nt file2 ] file1是否比file2

[file1 -ot file2 ] file1是否比file2

[file1 -ef file2 ] file1file2是否是链接文件,是否是快捷方式,软链接


4 两个数值之间判断

[n1 -eq n2 ] n1n2是否相等#推荐使用下面的 ==符号来判断

测试:aa=123;bb=123

[$aa -eq $bb ] && echo Yes || echo no

[n1 -ne n2 ] n1n2是否不等

[n1 -gt n2 ] n1大于n2

[n1 -lt n2 ] n1小于n2

[n1 -ge n2 ] n1大于等于n2

[n1 -le n2 ] n1小于等于n2



5 判断字符串


[-z 字符串] 判断字符串是否为空,变量值没有内容/为空则是真


[字符串1 == 字符串2] 判断字串1是否与字串2相等#判断采用的是字符串型

[$aa == $bb ] && echo 1 || echo 2

附:aa=abc

[“$aa” == “abc” ] && echo Yes || echo No #为什么把两个“”去掉测试也成功


[字符串1 != 字符串2] 判断字串是否不等


6 多重判断


-a 逻辑与

[-z $file -a -e $file ]

-o逻辑或

! 逻辑非


例子7:判断输入的文件类型和文件权限注:一定要练习

#!/bin/bash


echo-e "nide wenjian shifou cunzai? wenjian quanxian shi shenme?\n\n"


read-p "please input filename:" -t 30 filename


test-z $filename && echo "please input filename!!" &&exit 1

#判断字符串是否为空,如果为空,打印错误信息,并且退出程序!


test! -e $filename && echo "wenjian bucunzai!" &&exit 2

#-e 变量 判断文件是否存在,存在为真 ! 逻辑非


test-f $filename && filetype=putong

#-f 是否为普通文件

test-d $filename && filetype=mulu

#-d 是否为目录

test-r $filename && perm="read"

#-r是否有可读权限

test-w $filename && perm="$perm write"

#-w 是否可写

test-x $filename && perm="$perm executable"

#-x 是否可执行


echo-e "the filename is : $filename \n"

#打印文件名

echo-e "filetype is : $filetype \n"

#打印文件类型

echo-e "permision is : $perm \n"

#打印文件权限


流程控制


1 if语句


1if条件语句--单分支。当“条件成立”时执行相应的操作

格式:

if 条件测试命令

then 命令序列

fi


例子8

如果/boot分区的空间使用超过80%,则输出警告

#!/bin/bash

RATE=`df-hT | grep "/boot" | awk '{print $6}' | cut -d "%"-f1 ` #:反引号!!!

#:df命令:显示分区使用状况

if [ $RATE -gt 80 ]

then

echo"Warning,/boot DISK is full!"

fi


2if条件语句--双分支。当“条件成立”、“条件不成立”时执行不同操作

格式:

if 条件测试命令

then 命令序列1

else 命令序列2

fi


例子9

判断httpd服务是否启动,如果没有启动则启动

#!/bin/bash


http=`netstat-tlun | awk '{print $4 "\n"}' | grep ":80$"`

(http=$(ps aux | grep httpd | grep -v grep))


附:netstat-tlun 用来查看系统启动的所有端口

psaux 用来打印apache所有的进程

grep-v grep 把包含有grep的行取反

if [ -z "$http" ]

then

echo"httpd meiyou qidong!"

/etc/rc.d/init.d/httpdstart

else

echo"httpd runing"

fi

附:停掉Apacheservicehttpd stop

3) if条件语句--多分支

格式:

if 条件测试命令1 ; then

命令序列1

elif 条件测试命令2 ; then

命令序列2

elif ...

else

命令序列n

fi


例子10

#判断输入的字符

#!/bin/bash

echo"if you want to beijing ,please input 1"

echo"if you want to shanghai ,please input 2"

echo"if you want to chengdu ,please input 3"



read-p "please input a num: " -t 30 num


if[ "$num" == "1" ]

then

echo"beijing!!!"

elif[ "$num" == "2" ]

then

echo"shanghai!!!!"

elif[ "$num" == "3" ]

then

echo"chengdu!!!"

else

echo"error,please input 1 or 2 or 3."

fi












相关内容

热门资讯

德国总理:美国正在被伊朗羞辱 德国之声4月27日报道,德国总理默茨在访问一所学校时表示,在当前的持续冲突中,伊朗领导层正试图羞辱美...
理响中国|“长”歌以行,风云激... 光阴如梭,东方潮阔。这里是中国的长三角,世界的长三角。无论过去、现在还是未来,这片土地都因时代而生,...
白宫:特朗普及其国安团队开会讨... 新华社华盛顿4月27日电 美国白宫新闻秘书莱维特27日在记者会上证实,总统特朗普及其国家安全团队当天...
人民日报刊文:日本放开杀伤性武... 日本放开杀伤性武器出口推高地缘冲突风险(国际论坛)常思纯《人民日报》(2026年04月28日 第 0...
医疗保障法草案二审:明确生育保... 满足多样化健康保障需求本报记者 彭 波4月27日,医疗保障法草案二审稿提请十四届全国人大常委会第二十...
天津一景区发生自转旋翼机事故1... 澎湃新闻记者 吕新文中国民用航空华北地区管理局4月22日公布《豪客通航“10•1”天津长芦汉盐旅游区...
卡塔尔埃米尔与美国总统特朗普通... 当地时间24日,卡塔尔埃米尔塔米姆与美国总统特朗普通电话,重点就中东地区局势以及伊朗与美国谈判问题交...
男子30年前被扣押2859克黄... 澎湃新闻记者 王鑫家住辽宁省大连市的潘永嘉近日向澎湃新闻反映称,三十年前,他在大连周水子机场被盖州市...
商务部:取消反制欧盟两家金融机... 中华人民共和国商务部令二〇二六年 第1号鉴于欧盟已取消对中国两家金融机构的制裁措施,现公布《关于取消...
过去24小时共有5艘船只通过霍... 总台记者当地时间24日获悉,过去24小时内,共有5艘船只通过霍尔木兹海峡,其中包括一艘伊朗油轮。(总...