在理解選擇結構語句以前,咱們先看看幾個有意思的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相匹配的部分,條件是parameter與word相匹配從開頭開始,#與##的區別在於#是最短匹配模式,##是最長匹配模式.
六、${parameter%word*}
${parameter%%word*}
去掉parameter中與word相匹配的部分,條件是parameter與word相匹配從尾部 開始,%與%%的區別在於%是最短匹配模式,%%是最長匹配模式.
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
···
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