《Shell 程式設計》08_case 條件語句
阿新 • • 發佈:2018-11-01
《Shell 程式設計》08_case 條件語句
標籤(空格分隔): Shell
文章目錄
8.1 case 條件語句的語法
case "變數" in
值 1)
指令 1...
;;
值 2)
指令 2...
;;
*)
指令 3
esac
8.2 case 條件語句實踐
例 8-1
(1)apple
(2)pear
(3)banana
(4)cherry
當用戶輸入數字選擇水果時,告知選擇的水果並給水果單詞加上一種顏色。
給字型加顏色的命令為:
[[email protected] ~]# echo -e "\E[1;31m red color ylt\E[0m"
red color ylt #<== 列印的字為紅色
[[email protected] ~]# echo -e "\033[1;31m red color ylt\033[0m"
red color ylt
在上述命令中:
- echo -e 可以識別轉義字元,這裡將識別特殊字元的含義,並輸出。
- \E 可以使用 \033 替代。
- “[1” 數字 1 表示加粗顯示(不同數字代表不同意思,詳細資訊 man console_codes )。
- 31m 表示紅色字型,不同數字代表不同意思。
- “red color ylt” 代表要設定的內容。
- “[0m” 表示關閉所有屬性,不同數字代表不同意思。
有關 ANSI 控制碼說明如下:
- \33[0m 表示關閉所有屬性。
- \33[1m 表示設定高亮度。
- \33[4m 表示下劃線。
- \33[5m 表示閃爍。
- \33[7m 表示反顯。
- \33[8m 表示消隱。
- \33[30m – \33[37m 表示設定前景色。
- \33[40m – \33[47m 表示設定背景色。
開發指令碼:
[[email protected] scripts]# cat fruit.sh
#!/bin/bash
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
RES='\E[0m'
function usage(){
echo "USAGE: $0 {1|2|3|4}"
exit 1
}
function menu(){
cat <<END
1. apple
2. pear
3. banana
END
}
function chose(){
read -p "pls input your choice:" fruit
case "$fruit" in
1)
echo -e "${RED_COLOR}apple${RES}"
;;
2)
echo -e "${GREEN_COLOR}pear${RES}"
;;
3)
echo -e "${BLUE_COLOR}banana${RES}"
;;
*)
usage
esac
}
function main(){
menu
chose
}
main
例 8-2
開發給指定內容加指定顏色的指令碼
[[email protected] ~]# echo -e "033[1;30m black color\033[0m"
[[email protected] ~]# echo -e "\033[1;31m red color\033[0m"
[[email protected] ~]# echo -e "\033[1;32m green color\033[0m"
[[email protected] ~]# echo -e "\033[1;33m brown color\033[0m"
[[email protected] ~]# echo -e "\033[1;34m blue color\033[0m"
[[email protected] ~]# echo -e "\033[1;35m magenta color\033[0m"
[[email protected] ~]# echo -e "\033[1;36m cyan color\033[0m"
[[email protected] ~]# echo -e "\033[1;37m white color\033[0m"
[[email protected] scripts]# cat color.sh
#!/bin/bash
function Addcolor(){
RED_COLOR='\E[1;31m'
GREEN_COLOR='\E[1;32m'
YELLOW_COLOR='\E[1;33m'
BLUE_COLOR='\E[1;34m'
PINK_COLOR='\E[1;35m'
RES='\E[0m'
if [ $# -ne 2 ]; then
echo "Usage: $0 content {red|yellow|blue|pink}"
exit
fi
case "$2" in
red|RED)
echo -e "${RED_COLOR}$1${RES}"
;;
green|GREEN)
echo -e "${GREEN_COLOR}$1${RES}"
;;
yellow|YELLOW)
echo -e "${YELLOW_COLOR}$1${RES}"
;;
blue|BLUE)
echo -e "${BLUE_COLOR}$1${RES}"
;;
pink|PINK)
echo -e "${PINK_COLOR}$1${RES}"
;;
*)
echo "Usage: $0 content {red|yellow|blue|pink}"
exit
esac
}
function main(){
Addcolor $1 $2
}
main $*
例 8-3
給輸出的字串加背景顏色
echo -e "\033[40;37m 黑底白字 ylt\033[0m"
echo -e "\033[41;37m 紅底白字 ylt\033[0m"
echo -e "\033[42;37m 綠底白字 ylt\033[0m"
echo -e "\033[43;37m 棕底白字 ylt\033[0m"
echo -e "\033[44;37m 藍底白字 ylt\033[0m"
echo -e "\033[45;37m 洋紅底白字 ylt\033[0m"
echo -e "\033[46;37m 藍綠底白字 ylt\033[0m"
echo -e "\033[47;30m 白底黑字 ylt\033[0m"
例 8-4
實現通過傳參的方式往 /etc/openvpn_authfile.conf 新增使用者:
1)命令用法為:
USAGE: sh adduser {-add|-del|-search} username
2)如果有同名的使用者,則不能新增,如果沒有對應使用者,則無需刪除,查詢到使用者或沒有使用者時應給出明確的提示。
3)/etc/openvpn_authfile.conf 不能被所有外部使用者直接刪除及修改。
[[email protected] scripts]# cat auth.sh
#!/bin/bash
#Source function library.
. /etc/init.d/functions
#config file path
FILE_PATH=/etc/openvpn_authfile.conf
[ ! -f $FILE_PATH ] && touch $FILE_PATH
usage(){
cat <<EOF
USAGE: `basename $0` {-add|-del|-search} username
EOF
}
#judge run user
if [ $UID -ne 0 ]; then
echo "You are not supper user,pls call root!"
exit 1;
fi
#judge arg numbers
if [ $# -ne 2 ]; then
usage
exit 2
fi
case "$1" in
-a|-add)
shift #<== remove $1,$2-->$1
if grep "^$1$" ${FILE_PATH} >/dev/null 2&>1; then
action $"vpnuser,$1 is exist." /bin/false
exit
else
chattr -i ${FILE_PATH} #<==lock file
/bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)
echo "$1" >> ${FILE_PATH}
[ $? -eq 0 ] && action $"Add $1" /bin/true
chattr -i ${FILE_PATH}
fi
;;
-d|del)
shift
if [ `grep "\b$1\b" ${FILE_PATH}|wc -l` -lt 1 ]; then
action $"vpnuser,$1 is not exist," /bin/false
exit
else
chattr -i ${FILE_PATH}
/bin/cp ${FILE_PATH} ${FILE_PATH}.$(date +%F%T)
sed -i "/^${1}$/d" ${FILE_PATH}
[ $? -eq 0 ] && action $"Del $1" /bin/true
chattr -i ${FILE_PATH}
exit
fi
;;
-s|-search)
shift
if [ `grep -w "$1" ${FILE_PATH}|wc -l` -lt 1 ]; then
echo $"vpuser,$1 is not exist."; exit
else
echo $"vpnuser,$1 is exist."; exit
fi
;;
*)
usage
exit
;;
esac
例 8-5
實現 Nginx 服務的啟動和關閉的功能
[[email protected] scripts]# cat nginx.sh
#!bin/bash
path=/application/nginx/sbin
pid=/application/nginx/logs/nginx.pid
RETVAL=0
. /etc/init.d/functions
start(){
if [ ! -f $pid ];then
$path/nginx
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
action "nginx is started." /bin/true
return $RETVAL
fi
else
echo "nginx is running"
return 0
fi
}
stop(){
if [ -f $pid ]; then
$path/nginx -s stop
RETVAL=$?
if [ $RETVAL -eq 0 ]; then
action "nginx is stopped." /bin/true
return $RETVAL
else
action "nginx is stopped." /bin/false
return $RETVAL
fi
else
echo "nginx is not running"
return $RETVAL
fi
}
case "$1" in
start)
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
restart)
stop
sleep 1
start
RETVAl=$?
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit $RETVAL