bash编程之条件判断

 

每个完整并且合理的程序语言都具有条件判断的功能,并且可以根据条判断的结果做下一步处理,bash有:

if/then结构:用来判断命令列表的退出状态码是否为0

条件测试的表达式

 [ expression ]”[“test是一个内建命令,它把参数作为比较表达式,或者文件测试

[[ expression ]]”[[“是一个关键字

test expression

整数判断

[  ]中使用

-eq 相等     if [ “$a” –eq “$b” ]

-ne 不相等   if [ “$a” –ne “$b” ]

-ge 大于等于 if [ “$a” –ge “$b” ]

-gt 大于     if [ “$a” –gt “$b” ]

-le 小于等于 if [ “$a” –le “$b” ]

-lt 小于     if [ “$a” –lt “$b” ]

字符串测试

=  相等   if [ “$a” = “$b” ]

== 相等   if [ “$a” == “$b” ]

!=  if [ “$a” != “$b” ]

<  if [ “$a” \< “$b” ]   if [[ “$a” < “$b” ]]

>  if [ “$a” \> “$b” ]   if [[ “$a” > “$b” ]]

-z 字符串为“null”,意思就是字符串长度为零

-n 字符串不为“null”测试空字符串最好用[ "x$string" != x -o "x$a" ="x$b" ]

文件测试

shell 文件状态测试 

-b filename : filename 存在并且是块文件时返回真(返回0)

-c filename : filename 存在并且是字符文件时返回真

-d pathname : pathname 存在并且是一个目录时返回真

-e pathname : 当由pathname 指定的文件或目录存在时返回真

-f filename : filename 存在并且是正规文件时返回真

-g pathname : 当由pathname 指定的文件或目录存在并且设置了SGID 位时返回真

-h filename : filename 存在并且是符号链接文件时返回真 (-L filename)

-k pathname : 当由pathname 指定的文件或目录存在并且设置了"粘滞"位时返回真

-p filename : filename 存在并且是命名管道时返回真

-r pathname : 当由pathname 指定的文件或目录存在并且可读时返回真

-s filename : filename 存在并且文件大小大于0 时返回真

-S filename : filename 存在并且是socket 时返回真

-t fd       : fd 是与终端设备相关联的文件描述符时返回真

-u pathname : 当由pathname 指定的文件或目录存在并且设置了SUID 位时返回真

-w pathname : 当由pathname 指定的文件或目录存在并且可写时返回真

-x pathname : 当由pathname 指定的文件或目录存在并且可执行时返回真

-O pathname : 当由pathname 存在并且你是文件的拥有者返回真(字母O 大写)

-G pathname : 当由pathname 存在并且文件的group id和你相同时返回真

file1 -nt file2 : file1 file2 新时返回真

file1 -ot file2 : file1 file2 旧时返回真

file1 –et file2file1file2是相同文件的硬链接

举例: if [ -b /dev/hda ] ;then echo "yes" ;else echo "no";fi // 将打印 yes

test -c /dev/hda ; echo $? // 将打印 1 表示test 命令的返回值为1/dev/hda 不是字符设备

[ -w /etc/passwd ]; echo $? // 查看对当前用户而言,passwd 文件是否可写

测试时逻辑操作符-a 逻辑与,操作符两边均为真,结果为真,否则为假。-o 逻辑或,操作符两边一边为真,结果为真,否则为假。!  逻辑否,条件为假,结果为真

命令间的逻辑关系

逻辑与:&&

   第一个条件为假时,第二个条件不用再判断,最终结果已经有

   第一条件为真时,第二个条件必须得判断

逻辑或:||

 条件判断控制结构

单分支if语句

if 判断条件;then

   statement1

   statement2

   ...

fi

 

双分支的if语句:

if 判断条件;then

   statement1

   statement2

   ....

else 

   statement3

   statement4

    ....

fi

if 判断条件1;then

   statement1

   ....

elif 条件判断2;then

   statement2

    ....

elif 条件判断3;then

   statement3

   ....

else

   statement4

   ....

fi

If命令能够测试任何命令,  ”if COMMAND”结构将会返回COMMAND的退出状态码

 

 练习以下例题

练习:

写一个脚本完成以下要求:

1.添加3个用户user1,user2,user3:但先要判断用户是否存在,不存在而后再添加。

2.添加完成后显示一共添加了几个用户,(不包括因为事先存在而没有添加的)

3.最后显示系统上当前一共有多少用户

 

写一个脚本完成以下要求:

给定一个用户,如果其UID为0,就显示此为管理员;否则就显示为普通用户

 

写一个脚本,完成以下任务:

1.使用一个变量保存用户名

2.删除此变量中的用户且一并删除其家目录

3.显示“用户删除完成”类的信息

 

 

#!/bin/bash
if grep 'bash$' /etc/passwd &>/dev/null; then
echo "There is `grep 'bash$' /etc/passwd|wc -l|cut -d' ' -f1` users use bash."
else
echo " There is none user use the bash."
fi

#!/bin/bash

FILE=/ect/inittab

if [ ! -e $FILE ]; then

   echo "NO $FILE."

   exit 8

fi

if grep '^$' $FILE; then

echo "there are `grep '^$' $FILE | wc -l|cut -d' ' -f1` lines space l
ine."
else
echo " No blank line."
fi

 写一个脚本,给定一个文件:

如果是一个普通文件就显示之

如果是一个目录亦显示之

否则此为无法识别之文件。

#!/bin/bash
#
read -p "please input a file:" FILENAME
if [ ! -e $FILENAME ];then
echo "NO such file."
exit 8
fi

if [ -f $FILENAME ]; then
echo "$FILENAME is a simple file."
elif [ -d $FILENAME ]; then
echo "$FILENAME is a directory."
else
echo "$FILENAME is a WUFASHIBIE file."
fi

 

转载于:https://www.cnblogs.com/wangyi429111/p/8315932.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值