case語句的文法格式:
case expression in
pattern1)
suite1
;;
pattern2)
suite2
...
patternn)
suiten
*)
other_suite
esac
一、編寫一個測試腳本,名字為myservice.sh
根據輸入的選項,建立相應的檔案
#/bin/bash
#
myService=`basename $0`
lockFile="/var/lock/subsys/$myService"
[ $# -lt 1 ] && echo "Usage: $myService {start|stop|restart|status}" && exit 4
case $1 in
'start')
touch $lockFile
echo "Starting $myService OK"
;;
'stop')
rm -f $lockFile
echo "Stopping $myService OK"
'restart')
echo "Restarting $myService OK"
'status')
if [ -f $lockFile ];then
echo "$myService is runing"
else
echo "$myService is stopped"
fi
*)
echo "Usage: $myService {start|stop|restart|status}"
exit 3
執行腳本:
[root@192 src]# ./myservice.sh
Usage: myservice.sh{start|stop|restart|status}
[root@192 src]# ./myservice.sh status
myservice.sh is stopped
[root@192 src]# ./myservice.sh start
Starting myservice.sh OK
myservice.sh is runing
[root@192 src]# ./myservice.sh stop
Stopping myservice.sh OK
[root@192 src]# ./myservice.sh restart
Restartingmyservice.sh OK
二、練習:寫一個腳本
1、提示使用者輸入一個任意字元
2、能判斷此字元是數字、字母或特殊字元
vim user.sh
#!/bin/bash
while true;do
read -p " Enter a char: " char
[[ "$char" == 'quit' ]]&& break
case $char in
[a-z])
echo "word"
;;
[0-9])
echo "digital"
echo "special"
done
腳本執行結果:
[root@192 src]# ./user.sh
Enter a char: 9
digital
Enter a char: a
word
Enter a char: >
special
Enter a char: quit
[root@192 src]#
三、練習:寫一個腳本,能對/etc/目錄進行打包備份,備份位置為/backup/etc-日期.字尾
1、顯示如下菜單給使用者:
xz) xz compress
gzip) gzip compress
bip2) bzip2 compress
2、根據使用者指定的壓縮工具使用tar打包壓縮
3、預設為xz:輸入錯誤則需要使用者重新輸入
[root@192 src]# cat backup.sh
[ -d /backup ] || mkdir /backup
cat << EOF
Please choose a compress tool:
bzip2) bzip2 compress
EOF
while true; do
read -p "Your option: " option
option=${option:-xz}
case $option in
xz)
compressTool='J'
suffix='xz'
break ;;
gzip)
compressTool='z'
suffix='gz'
bzip2)
compressTool='j'
suffix='bzip2'
*)
echo "wrong option."
;;
esac
tar ${compressTool}cf /backup/etc-`date+%F-%H-%M-%S`.tar.$suffix /etc/*
[root@192 src]# ./backup.sh
Your option: xz
tar: 從成員名中删除開頭的“/”
[root@192 src]# cd /backup/
[root@192 backup]# ls
etc-2016-08-13-22-46-26.tar.xz
可以看到已經按照要求生成相應的備份檔案。
四、練習:寫一個腳本,完成如下功能
說明:此腳本能夠為指定網卡建立别名、指定位址;使用格式:mkethalias -v| --verbose -i ethx
1、-i選項用于指定網卡
2、如果網卡存在:在指令行,請使用者指定一個别名
3、讓使用者指定IP和掩碼
4、使用者可以同時使用-V或--verbose選項:如果使用了,顯示配置結果:否則,則不予顯示
vim scriptargs.sh
debug=0
while [ $# -ge 1 ];do
case $1 in
-i|--interface)
ethcard="$2"
shift 2
-v|--verbose)
debug=1
shift
*)
echo "Wrong options arguments."
echo "Usage: `basename $0` [-v|--verbose] -i|--interfaceInterface"
shift $#
esac
#echo "Interface: $ethcard, VerboseFlag: $debug "
! ifconfig $ethcard &> /dev/null&& echo "No this interface ..." && exit 3
read -p "Enter an alias: "ethAlias
read -p "Enter IP: " ipAddr
read -p "Mask: " netMask
ifconfig $ethAlias $ipAddr netmask $netMask
[ $debug -eq 1 ] && ifconfig$ethAlias
執行結果:
[root@192 src]# vim scriptargs.sh -i eth0
[root@192 src]# ./scriptargs.sh -i eth0
Enter an alias: eth0:2
Enter IP: 192.168.1.5
Mask: 255.255.255.0
[root@192 src]# ifconfig
eth0 Link encap:Ethernet HWaddr00:0C:29:D9:A2:5D
inet addr:192.168.10.102 Bcast:192.168.10.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed9:a25d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16489 errors:0 dropped:0 overruns:0 frame:0
TX packets:8692 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1345332 (1.2 MiB) TXbytes:945356 (923.1 KiB)
eth0:2 Link encap:Ethernet HWaddr00:0C:29:D9:A2:5D
inet addr:192.168.1.5 Bcast:192.168.1.255 Mask:255.255.255.0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0(0.0 b)