shell编程基础(shell脚本学习笔记)


文章目录

  • shell编程基础(shell脚本学习笔记)
  • 判断
  • 1. if判断结构
  • 2. if/else判断结构
  • 3. if/elif/else判断结构
  • 4. case判断结构


判断


有了测试,就要有获得测试结果的机制,并根据测试结果运行不同的代码段,这样程序就可以从简单的命令罗列变得更“智能”一些,从而实现程序的流程控制。在Shell中,流程控制分为两大类,一类是“循环”,一类是“判断选择”。

1. if判断结构

if是最简单的判断语句,可以针对测试结果做相应处理:如果测试为真则运行相关代码,其语法结构如下:

if expression; then
        command
fi
if expression; then
         command1
         command2
         ...
fi

2. if/else判断结构

上一小节中的if结构非常简单,它只会在if判断为真的情况下执行then后面的内容,所以该语句只能做 “单向选择” 。虽然可以通过顺序使用多条if语句,以满足多种条件的判断,但是看起来还是比较烦琐。而if/else语句则可以完成两个分支的选择:如果if后的判断成立,则执行then后面的内容;否则执行else后面的内容。其语法结构如下:

if expression; then
        command
else
        command
fi

3. if/elif/else判断结构

不论是if结构的单向选择,还是if/else结构的双向选择,实际上都不能满足需要,现实中的判断往往有多种可能,在这种情况下可以通过if/else的语法嵌套完成多向选择。其结构如下所示:

if expression1; then
        command1
else
        if  expression2; then
                 command2
        else
                 command3
        fi
fi

使用这种嵌套的方式可以增加更多的选择分支,虽然从语法上来说毫无错误,但使用这种方式进入多层嵌套后,代码的可读性会变得越来越差。这时可以使用if/elif/else结构。其语法结构如下:

if expression1; then
         command1
elif expression2; then
         Command2
elif expression3; then
         Command3
...
fi

4. case判断结构

和if/elif/else判断结构一样,case判断结构也可以用于多种可能情况下的分支选择。其语法结构如下:

case VAR in
var1) command1 ;;
var2) command2 ;;
var3) command3 ;;
...
*) command ;;
esac

其原理为从上到下依次比较VAR和var1、var2、var3的值是否相等,如果匹配相等则执行后面的命令语句,在无一匹配的情况下匹配最后的默认*,并执行后面的默认命令。要注意的是,case判断结构中的var1、var2、var3等这些值只能是常量或正则表达式。

下面的脚本可以用于检测用户的输入中是否含有大写字母、小写字母或者数字,这里case匹配的值是正则表达式。

[root@localhost ~]# cat detect_input.sh
#!/bin/bash
read-p "Give me a word: " input
echo-en "You gave me some "
case $input in
         *[[:lower:]]*) echo-en "Lowercase " ;;
         *[[:upper:]]*) echo-en "Uppercase " ;;
         *[[:digit:]]*) echo-en "Numerical " ;;
         *) echo "unknown input." ;;
esac