bash的编程之case语句:用法格式

    case 变量引用(${}) in

     value1)

      语句1

      语句2

      ...

      ;;

     value2)

       语句1

       语句2

       ...

       ;;

     value3)

      语句1

      语句2

      ...

      ;;

     *)

      语句1

      语句2

      ...

      ;;

    esac

例:写一个脚本,能接受参数gzip、bzip2或xz,而后能将/etc/目录归档备份至/backup目录,并以参数指定的形式压缩存放;文件名称包含脚本执行时刻的时间.    

    #!/bin/bash

    #

      Com=$1

    if [ -z $Com ]; then

      Com=gzip

    fi

      [ -d /backup ] || mkdir /backup

    case $Com in

    gzip)

      tar zcf /backup/etc-`date +%F-%H-%M-%S`.tar.gz /etc/*

      RetVal=$?

      ;;

    bzip2)

      tar jcf /backup/etc-`date +%F-%H-%M-%S`.tar.bz2 /etc/*

      RetVal=$?

      ;;

    xz)

      tar Jcf /backup/etc-`date +%F-%H-%M-%S`.tar.xz /etc/*

      RetVal=$?

      ;;

    *)

      echo "Usage: `basename $0` {[gzip|bzip2|xz]}"

      exit 6

      ;;

    esac

      [ $RetVal -eq 0 ] && echo "Backup etc finished.($Com)."

例:判断当前Linux发行版是RedHat, Fedora, CentOS还是其它。方法:取得/etc/issue文件第一行的第一个单词后进行比较.

     #!/bin/bash

     #

       Issue=`grep "$1" /etc/issue | cut -d' ' -f1`

     case $Issue in

     RedHat)

       echo "RedHat";;

     Fedora)

       echo "Fedora";;

     CentOS)

       echo "CentOS";;

     *)

       echo "{[RedHat|Fedora|Centos]}"

     exit 3

     ;;

     esac

bash内置命令read,可与用户交互

    选项:

        -p "prompt":提示信息

        -t # 超时秒数

    例: 写一个脚本

        1、显示如下菜单给用户:

            m|M) show memory usages;

            d|D) show disk usages;

            q|Q) quit

        2、如果用户选择了第一项,则显示内存使用信息;

             如果选择了第二项,则显示磁盘挂载及使用相关信息;

             如果是第三项,退出,并显示选择退出;

             其它任何内容,均说明错误选项;

    #!/bin/bash

    #

    cat << EOF

    m|M) show memory usages;

    d|D) show disk usages;

    q|Q) quit

    EOF

    read -p "Your choice: " Choice

    case $Choice in

    m|M)

       free -m ;;

    d|D)

       df -lh ;;

    q|Q)

       echo "Quit..."

       exit 0

    ;;

    *)

       echo "Invalid input."

       exit 5

    ;;

    esac