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 0 -o $score -gt 100 ]; then
    echo invalid
elif [ $score -lt 60 ]; then
    echo bad score
elif [ $score -lt 80 ]; then
    echo no bad
elif [ $score -lt 90 ]; then
    echo pretty good
else
    echo very good
fi

执行结果

please input a score:
100
very good
please input a score:
101
invalid
please input a score:
25
bad score
please input a score:
70
no bad
please input a score:
89
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
    100) echo 满分 ;;
    90) echo 优秀线 ;;
    80) echo 良好线 ;;
    60) echo 及格线 ;;
    *) echo 普通分数 ;;
esac

执行结果

please input a score:
60
及格线
please input a score:
50
普通分数
please input a score:
90
优秀线
please input a score:
-10
普通分数

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:
12a
Lowercase
give me a word:
123
Numberical
give me a word:
;[]
unknown input

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值