shell 脚本编程之条件语句

来源:互联网 发布:杰奇小说源码 编辑:程序博客网 时间:2024/06/13 23:59

if 判断结构

if 判断的结构如下

if condition; then    commandelif condition; then    commandelse    commandfi

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

#learn_condition.sh#!/bin/bashecho please input a score:read scoreif [ $score -lt 0 -o $score -gt 100 ]; then    echo invalidelif [ $score -lt 60 ]; then    echo bad scoreelif [ $score -lt 80 ]; then    echo no badelif [ $score -lt 90 ]; then    echo pretty goodelse    echo very goodfi

执行结果

please input a score:100very goodplease input a score:101invalidplease input a score:25bad scoreplease input a score:70no badplease input a score:89pretty 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 scorecase $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 wordcase $word in    *[[:lower:]]*) echo -en "Lowercase " ;;    *[[:upper:]]*) echo -en "Uppercase " ;;    *[[:digit:]]*) echo -en "Numberical " ;;    *) echo "unknown input" ;;esac

执行结果

give me a word:LinLowercasegive me a word:LINUppercasegive me a word:12aLowercasegive me a word:123Numbericalgive me a word:;[]unknown input

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

原创粉丝点击