天天看点

shell 脚本编程之条件语句

if 判断结构

if 判断的结构如下

if condition; then
    command
elif condition; then
    command
else
    command
fi
           

要特别注意的是 condition 后面要加一个分号,这是与很多语言不相同的地方;另外否则如果的关键字是 elif,if 结束的关键字是 fi,if 反过来写

#learn_condition.sh
#!/bin/bash
echo please input a score:
read score
if [ $score -lt  -o $score -gt  ]; then
    echo invalid
elif [ $score -lt  ]; then
    echo bad score
elif [ $score -lt  ]; then
    echo no bad
elif [ $score -lt  ]; then
    echo pretty good
else
    echo very good
fi
           

执行结果

please input a score:

very good
please input a score:

invalid
please input a score:

bad score
please input a score:

no bad
please input a score:

pretty good
           

case 判断结构

case 判断的结构如下

case VAR in
    condition1) command1 ;;
    condition2) command2 ;;
    *) command3 ;;
esac
           

case 结构相当于 C 语言中的 switch 语句,要注意的是每个分支后面要加两个分号,分号和命令之间要有空格;条件后面加一个括号,default 分支用一个 * 表示;结束关键字为 esac,刚好是 case 反过来写,if 结束关键字也是 if 反过来写,这点比较奇葩。

echo please input a score:
read score

case $score in
    ) echo 满分 ;;
    ) echo 优秀线 ;;
    ) echo 良好线 ;;
    ) echo 及格线 ;;
    *) echo 普通分数 ;;
esac
           

执行结果

please input a score:

及格线
please input a score:

普通分数
please input a score:

优秀线
please input a score:
-
普通分数
           

case 结构比较简单明了,但它只能处理相等的情况,功能没有 if 那么强大;像这个例子中 -10 属于 default 分支,就被判定成普通分数。如果只是判断几个相等的情况,则可以优先选 case,case 处理不了的再用 if 结构。另外 case 结构可以处理正则表达式的情况

echo give me a word:
read word
case $word in
    *[[:lower:]]*) echo -en "Lowercase " ;;
    *[[:upper:]]*) echo -en "Uppercase " ;;
    *[[:digit:]]*) echo -en "Numberical " ;;
    *) echo "unknown input" ;;
esac
           

执行结果

give me a word:
Lin
Lowercase
give me a word:
LIN
Uppercase
give me a word:
a
Lowercase
give me a word:

Numberical
give me a word:
;[]
unknown input
           

这个脚本判断输入的单词是否有小写字母或大写字母或数字,使用正则表达式的方式,如果单词中存在小写字母,则匹配到第一个条件;否则如果存在大写字,则匹配到第二个条件;否则如果存在数字,则匹配到第三个条件;否则则匹配到默认条件。echo 后面的两个参数,-e 的意思是处理特殊字符,-n 的意思是不换行,下次 echo 的输出会接着本次输出的后面。

继续阅读