shell编程(三)

沈超

shenchao@lampbrother.net

weibo.com/lampsc

 

 

shell编程(三)

 

四 条件测试

 

test  测试条件  测试内容

[ 测试条件  测试内容 ]

 

1 测试文件类型

 

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

[  -e 文件名  ] 注意:[]中必须有空格

 

test  -f  文件名 判断是否是普通文件

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  ] file1与file2是否是链接文件

 

4 两个数值之间判断

[ n1  -eq  n2 ] n1和n2是否相等

[ n1  -ne  n2 ] n1和n2是否不等

[ 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

 

[ 字符串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

#-z  变量 判断字符串是否为空,为空为真

 

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语句

 

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

格式:

if  条件测试命令

     then   命令序列

fi

 

例子8:

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

#!/bin/bash

RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 `

if  [  $RATE  -gt  80  ]

then

    echo "Warning,/boot DISK is full!"

fi

 

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

格式:

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))

 

if  [ -z "$http" ]

then

echo "httpd  meiyou qidong!"

/etc/rc.d/init.d/httpd start

else

echo "httpd runing"

fi

 

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

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值