shell 腳本 語法 之選擇語句 (二)

   在理解選擇結構語句以前,咱們先看看幾個有意思的bash編程變量進階替,這些進階的替換在不少時候能給咱們帶來快捷方便的處理方式。
編程

1、bash編程之變量替換的進階bash

一、${parameter:-word}ide

  當變量未定義或者值爲空時,返回值爲word的內容,不然返回變量的值.   ui

二、${parameter:=word}spa

  若變量未定義或者值爲空時,在返回word的值的同時將word賦值給value   ip

三、${parameter:?word}內存

  若變量以賦值的話,正常替換.不然將消息message送到標準錯誤輸出(若此替換出如今Shell程序中,那麼該程序將終止運行) input

四、${parameter:+word}it

  若變量以賦值的話,其值才用word替換,不然不進行任何替換io

五、${parameter#*word}

  ${parameter##*word}

  去掉parameter中與word相匹配的部分,條件是parameterword相匹配從開頭開始,#與##的區別在於#是最短匹配模式,##是最長匹配模式.  

六、${parameter%word*}

  ${parameter%%word*}

   去掉parameter中與word相匹配的部分,條件是parameterword相匹配從尾部 開始,%與%%的區別在於%是最短匹配模式,%%是最長匹配模式.

eg:

一、FILE=/usr/local/src

${FILE#*/}: usr/local/src

${FILE##*/}: src

${FILE%/*}: /usr/local

${FILE%%/*}:


2、if選擇語句

  一、單分支if語句

  if 條件 ;then

     語句1

     語句2

     ···

  fi

eg:

二、寫一個腳本,實現以下功能:

若是設備/dev/sda3已經掛載,就顯示其掛載點

#!/bin/bash
#
Device='/dev/sda3'
if mount | grep "^$Device" &> /dev/null; then
  mount | grep "/dev/sda3" | cut -d' ' -f3
fi


 二、雙分支if語句

  if 條件 ;then

     語句1

     語句2

     ···

  else

     語句1

     語句2

     ···

  fi

eg:

三、給定一個用戶,若是其UID等於GID,就說明這是個「good guy」,不然,「Bad guy.」

#!/bin/bash
#
UserName=user1
if [ `id -u $UserName` -eq `id -g $UserName` ]; then
  echo "Good Guy."
else
  echo "Bad Guy."
fi


 三、多分支if語句

  if 條件1 ;then

     語句1

     語句2

     ···

elif 條件2 ;then

     語句1

     語句2

     ···

else

     語句1

     語句2

     ···

 fi

eg:

四、寫一個腳本,能接受參數gzip、bzip2或xz,然後能將/etc/目錄備份至/backup目錄,並以參數指定的形式壓縮存放;文件名稱包含腳本執行時刻的時間;

#!/bin/bash
#
Com=$1
if [ -z $Com ]; then
  Com=gzip
fi
[ -d /backup ] || mkdir /backup
if [ $Com == 'gzip' ]; then
  tar zcf /backup/etc-`date +%F-%H-%M-%S`.tar.gz /etc/*
  [ $? -eq 0 ] && echo "Backup etc finished.(gzip)."
elif [ $Com == 'bzip2' ]; then
  tar jcf /backup/etc-`date +%F-%H-%M-%S`.tar.bz2 /etc/*
  [ $? -eq 0 ] && echo "Backup etc finished.(bzip2)."
elif [ $Com == 'xz' ]; then
  tar Jcf /backup/etc-`date +%F-%H-%M-%S`.tar.xz /etc/*
  [ $? -eq 0 ] && echo "Backup etc finished.(xz)."
else
  echo "Usage: `basename $0` {[gzip|bzip2|xz]}"
  exit 6
fi

3、case選擇語句

case ${ } (變量引用)in

value1)

  語句1

  語句2

  ···

  ;;

value2)

  語句1

  語句2

  ···

  ;;

value3)

  語句1

  語句2

  ···

 ;;

*)

  語句1

  語句2

  ···

 ;;

esac

eg:


五、寫一個腳本

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
相關文章
相關標籤/搜索