条件判断式

只要讲到程序的话,那么条件判断式,亦即是if then这种判别式肯定一定要学习的,另外一种是case...esac


if....then

这个是if...then 是最常见的条件判断式了,它分为单分支条件判断式,双分支条件判断式,多分支条件判断式


单分支条件判断语句:

if [ 条件判断式 ]

then

  输出内容

fi


双分支条件判断式:

if [ 条件判断式 ]

then

  输出内容

else

  输出内容

fi


多分支条件判断式

if [ 条件判断式 ]

then

  输出内容

elif [ 条件判断式 ]

then

  输出内容

else

  输出内容

fi


对于条件判断式里面的对比常见的有3种方式,分别是数值对比、字符对比、文件对比


数值对比:

整数对比

-eq:测试两个整数是否相等,比如$A -eq $B

-ne:测试两个整数是否不等:不等,为真:相等,为假

-gt:测试一个数是否大于另一个数:大于,为真:否则,为假

-lt:测试一个数是否小于另一个数:小于,为真:否则,为假

-ge:大于或等于

-le:小于或等于


字符对比:

STRING1 = STRING2 :表示字符相等

STRING1 != STRING2:表示字符不相等


文件对比:

-e:表示文件是否存在

-f:表示文件存在且是一个普通文件

##还有很多选项,以上两个是比较常用的


练习:写一个脚本

判断当前系统上是否有用户默认shell为bash:

如果有,就显示有多少个这类用户:否则,就显示没有这类用户

[root@xiangys0134_2 ~]# cat ba.sh 

#!/bin/bash

bashuser=`grep "\" /etc/passwd |cut -d":" -f 1`

if [ $? -eq 0 ];then

   echo "以下用户拥有bash:"

   echo "${bashuser}"

else

   echo "没有用户拥有bash"

fi


练习:写一个脚本

给定一个文件,比如/etc/inittab

判断这个文件中是否有空白行

如果有,则显示其空白行数:否则,显示没有空白行

[root@xiangys0134_2 ~]# cat hang.sh 

#!/bin/bash

hang=`grep '^$' /etc/inittab |wc -l`

if [ ! $? -eq 0 ];then

   exit 8

fi

if [ $hang -gt 0 ];then

  echo "有${hang}行空白行"

else

  echo "没有空白行"

fi 


练习:写一个脚本

给定一个用户,判断其UID与GID是否一样

如果一样,就显示此用户为"good guy":否则,就显示此用户为"bad guy"

[root@xiangys0134_2 ~]# cat ug.sh 

#!/bin/bash

useruid=`id -u "$@" 2>/dev/null`

if [ ! $? -eq 0 ];then

  echo "请传入正确的用户"

  exit 9

fi

usergid=`id -g "$@" 2>/dev/null`

if [ ! $? -eq 0 ];then

  echo "请传入正确的用户"

  exit 9

fi

if [ $# -eq 1 ];then

   if [ $useruid -eq $usergid ];then

     echo "good guy"

     echo "${1}的UID和GID"

   else

     echo "bad guy"

   fi

else

   echo "请传入正确的参数"

fi


练习:写一个脚本

判定命令历史中历史命令的总条数是否大于1000,:如果大于,则显示"Some command will gone":否则显示"ok"。

[root@xiangys0134_2 ~]# cat his.sh 

#!/bin/bash

#

his=`history |wc -l 2>/dev/null`

if [ $his -gt 1000 ];then

  echo "Some command will gone"

else

  echo "ok"

fi

case....esac判断

语法

case 变量名称 in

值一)

 输出信息

;;

值二)

 输出信息

;;

*)

 输出信息

;;

esac

#一般常用于传参