四、其他控制语句
1.case分支格式:
case  变量值  in
    模式1)
           命令序列1
           ;;
    模式2)
          命令序列2
           ;;
  ……
    * )
          默认执行的命令序列
esac

2.until循环语句格式:

until  条件测试命令
do
      命令序列
done

3.shift迁移语句
迁移位置变量,将 $1~$9 依次向左传递

4,break语句

在for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语5,continue
在for、while、until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环句


由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符,并输出相应的提示信息。
[root@localhost ~]# vi hitkey.sh
#!/bin/bash
read -p "ress some key, then press Return: " KEY
case "$KEY" in
   [a-z] | [A-Z])
        echo "It's a letter."
    ;;
[0-9])
        echo "It's a digit."
    ;;
*)
      echo "It's function keys,spacebar or other keys. "
esac
[root@localhost ~]# sh hitkey.sh 
Press some key, then press Return: K
It's a letter.
[root@localhost ~]# sh hitkey.sh 
Press some key, then press Return: 6
It's a digit.
[root@localhost ~]# sh hitkey.sh 
Press some key, then press Return: ^[[19~   //按F8键
It's function keys,spacebar or other keys.

编写一个shell程序,计算多个整数值的和,需要计算的各个数值由用户在执行脚本时作为命令行参数给出。
[root@localhost ~]# vi sumer.sh
#!/bin/bash
Result=0
while [ $# -gt 0 ]
do
    Result=`expr $Result + $1`
    shift
done
echo "The sum is : $Result"
[root@localhost ~]# chmod a+x sumer.sh 
[root@localhost ~]# ./sumer.sh 12 34
The sum is : 46

循环提示用户输入字符串,并将每次输入的内容保存到临时文件“/tmp/input.txt”中,当用户输入“END”字符串时退出循环体,并统计出input.txt文件中的行数、单词数、字节数等信息,统计完后删除临时文件。
[root@localhost ~]# vi inputbrk.sh
#!/bin/bash
while true
do
      read -p "Input a string: " STR
      echo $STR >> /tmp/input.txt
      if [ "$STR" = "END" ] ;  then
           break
      fi
done
wc /tmp/input.txt
rm -f /tmp/input.txt
[root@localhost ~]# sh inputbrk.sh 
Input a string: wandogn
Input a string: dongdonga
Input a string: END
3  3 22 /tmp/input.txt

删除系统中的stu1~stu20各用户账号,但stu8、stu18除外。
[root@localhost ~]# vi delsome.sh
#!/bin/bash
i=1
while [ $i -le 20 ]
do
    if [ $i -eq 8 ] || [ $i -eq 18 ] ; then
       let i++
       continue
    fi
    userdel -r stu$i
    let i++
done
[root@localhost ~]# sh delsome.sh 
[root@localhost ~]# grep "stu" /etc/passwd
stu8:531:531::/home/stu8:/bin/bash
stu18:541:541::/home/stu18:/bin/bash

五、Shell函数应用
1,语法
function 函数名 {
  命令序列

或者:
函数名() {
  命令序列
}

在脚本中定义一个help函数,当用户输入的脚本参数不是“start”或“stop”时,加载该函数并给出关于命令用法的帮助信息,否则给出对应的提示信息。
[root@localhost ~]# vi helpfun.sh
 
#!/bin/bash
help() {
      echo "Usage: "$0" start|stop"
}
case "$1" in
   start)
      echo "Starting ..."
     ;;
*)
     help
esac
[root@localhost ~]# chmod a+x helpfun.sh
[root@localhost ~]# ./helpfun.sh start
Starting ...
[root@localhost ~]# ./helpfun.sh restart
Usage: ./helpfun.sh start|stop

在脚本中定义一个加法函数,用于计算两个数的和,并调用该函数分别计算12+34、56+789的和。
[root@localhost ~]# vi adderfun.sh
#!/bin/bash
adder() {
      echo `expr $1 + $2`
}
adder 12 34
adder 56 789
[root@localhost ~]# sh adderfun.sh 
46
845