shell条件判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell条件判断相关的知识,希望对你有一定的参考价值。

条件判断式

只要讲到程序的话,那么条件判断式,亦即是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:

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

[[email protected]_2 ~]# cat ba.sh 

#!/bin/bash

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

if [ $? -eq 0 ];then

   echo "以下用户拥有bash:"

   echo "${bashuser}"

else

   echo "没有用户拥有bash"

fi


练习:写一个脚本

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

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

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

[[email protected]_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"

[[email protected]_2 ~]# cat ug.sh 

#!/bin/bash

useruid=`id -u "[email protected]" 2>/dev/null`

if [ ! $? -eq 0 ];then

  echo "请传入正确的用户"

  exit 9

fi

usergid=`id -g "[email protected]" 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"。

[[email protected]_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

#一般常用于传参


本文出自 “常想一二” 博客,请务必保留此出处http://250919938.blog.51cto.com/962010/1918592

以上是关于shell条件判断的主要内容,如果未能解决你的问题,请参考以下文章

Shell中条件判断语法与判断条件

shell怎么对小数进行条件判断?

SHELL学习笔记----IF条件判断,判断条件

Shell脚本IF条件判断和判断条件总结

shell命令中的条件测试与判断语句

Linux Shell编程 条件判断语法