Shell的判断语句

Zss 发表于:

可以看出其实shell的判断语句和python的很相似,因为shell没有缩进的要求,所以完全可以写出python缩进的风格,但是多了一个case语句

第一种:if语句

if [条件判断式];then
    条件成立执行体
fi

例子:判断输入的字符和zss是否相同,特别应该注意的地方时判断条件中[]中的写法

[空格变量空格-eq空格变量空格],这些空格是不能缺少的

#!/bin/sh
echo 输入字符来判断是否和zss相同
read str
if [ $str = 'zss' ];then
    echo ---》字符相同
fi

第二种:if-else语句

if [条件判断式];then
    条件成立执行体
else
    条件不成立执行体
fi

例子:输入一个数字判断是否等于5,其中 = 用来判断是否等于,作用和 -eq 一致[ $a -eq 5 ]   !=的作用与-ne一致 均为不等于  -eq -ne只适用于整数之间的比较,不适用字符串

#!/bin/sh
echo 输入数字
read a
echo ---a的值为:${a}---
if  [ $a = 5 ];then
    echo ---相等---
else
    echo ---不相等---
fi

第三种:if-elif-else语句

if [条件1判断式];then
    条件1成立执行体
elif [条件2判断式];then
    条件2成立执行体
else
    条件1,2都不成立执行体
fi
#!/bin/sh
echo 输入字符来判断是否和zss相同
read str
if [ $str = 'zw' ];then
    echo ---》字符与zw相同
elif [ $str = 'zone' ];then
    echo ---》字符与zone相同
elif [ $str = 'zss' ];then
    echo ---》字符与zss相同
else
    echo ---》全部不相同
fi

第四种:case语句   case语句实际上就是规范的多分支if语句

read -p '输入字符来判断和zss和zw是否相同' str
case $str in
    'zw')
        是否等于zss字符的执行体
        ;;
    'zss')        
        是否等于zss字符的执行体
        ;;
     *)                
        上面的条件全部不成立的执行体
esac

每一个变量内容的程序段最后都需要两个分号 (;;) 来代表该程序段落的结束;每个变量情况最后都要有)结尾;其余情况用*)来表示;最后要用esac来结束,即case反过来

判断用户输入的字符是什么类型

#! /bin/sh  
  
#输出提示信息  
echo "Hit a key,then hit return."  
#读取用户按下的键  
read keypress  
#case语句开始  
case "$keypress" in  
   #小写字母  
   [[:lower:]])  
      echo "Lowercase letter.";;  
   #大写字母  
   [[:upper:]])  
      echo "Uppercase letter.";;  
   #单个数字  
   [0-9])  
      echo "Digit.";;  
   #其他字符  
   *)  
      echo "other letter.";;  
esac

(1)case语句相当于多分支的if语句。case语句优势更规范、易读。

(2)case语句适合变量值少,并且固定的数字或字符串的集合。(1,2,3)或(start,stop,restart)。

(3)系统服务启动脚本传参多使用case语句,参考/etc/init.d/rsyslog的启动脚本。

(4)所有case语句都可以使用if实现,但是case语句更规范清晰一些。

(5)case语句一般适合于服务的启动脚本。

(6)case的变量的值如果已知固定的start/restart/stop的元素比较适合。

语句小结:

(1)case主要是写启动脚本,范围较窄。

(2)if取值判断、比较、应用广泛