1、case語句的用法:
[root@ELK-chaofeng test]# cat test3.sh #!/bin/bash while true ;do read -p "please input the menu:cpu,mem,disk,quit: " variable case $variable in cpu) lscpu break ;; mem) free -m break ;; disk) fdisk -l /dev/[shv]d[a-z][0-9] break ;; *) echo "error,again" ;; esac done
看一下效果
現在我們來編寫一個服務框架:
[root@ELK-chaofeng init.d]# cat testservice #!/bin/bash # #chkconfig: 2345 60 60 #description: test service script # prog=$(basename $0) lockfile=/var/lock/subsys/${prog} case $1 in start) if [ -f $lockfile ];then echo "service $prog is running" else touch $lockfile echo "service $prog start" fi ;; stop) if [ -f $lockfile ];then rm -rf $lockfile echo "service $prog stop" else echo "service $prog stop" fi ;; restart) if [ -f $lockfile ];then rm -rf $lockfile && touch $lockfile echo "service $prog restart" else touch $lockfile echo "service $prog start" fi ;; status) if [ -f $lockfile ];then echo "service $prog is running" else echo "service $prog is not running" fi ;; *) echo "usage: $prog {start|restart|stop|status}" ;; esac
然后chkconfig添加至service服務管理。現在看一下效果:
[root@ELK-chaofeng init.d]# chkconfig --add testservice [root@ELK-chaofeng init.d]# chkconfig --list testservice Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. testservice 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@ELK-chaofeng init.d]# service testservice status service testservice is running [root@ELK-chaofeng init.d]# service testservice stop service testservice stop [root@ELK-chaofeng init.d]# service testservice start service testservice start [root@ELK-chaofeng init.d]# service testservice status service testservice is running [root@ELK-chaofeng init.d]# service testservice stop service testservice stop [root@ELK-chaofeng init.d]# service testservice status service testservice is not running [root@ELK-chaofeng init.d]# service testservice restart service testservice start [root@ELK-chaofeng init.d]# service testservice status service testservice is running
case總結:
case支持glob風格的通配符:、
*:任意長度的任意字符;
?:任意單個字符;
[ ]:范圍內任意單個字符;
a|b:a或b
現在我們使用函數來改寫上面的腳本:
#!/bin/bash # #chkconfig: 2345 60 60 #description: test service script # prog=$(basename $0) lockfile=/var/lock/subsys/${prog} start(){ if [ -f $lockfile ];then echo "service $prog is running" else touch $lockfile echo "service $prog start" fi } stop() { if [ -f $lockfile ];then rm -rf $lockfile echo "service $prog stop" else echo "service $prog stop" fi } else touch $lockfile echo "service $prog start" fi } stop() { if [ -f $lockfile ];then rm -rf $lockfile echo "service $prog stop" else echo "service $prog stop" fi } status() { if [ -f $lockfile ];then echo "service $prog is running" else echo "service $prog is not running" fi } usage () { echo "usage: $prog {start|restart|stop|status}" } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) usage ;; esac
2、for語句的高級用法:
#!/bin/bash # print 9*9 for ((k=1;k<=9;k++));do for ((i=1;i<=k;i++));do echo -e -n "${i}X${k}=$[${i}*${k}]\t" done echo "" #huan hang done
看一下效果:
3、while語句的高級用法
#!/bin/bash while read VARIABLE;do userID=`echo $VARIABLE | cut -d':' -f 3` userUS=`echo $VARIABLE | cut -d':' -f 1` usershell=`echo $VARIABLE | cut -d':' -f 7` if [ $[$userID%2] -eq 0 ];then echo "$userID,$userUS,$usershell" fi done < /etc/passwd
看一下效果: