shell脚本之九:case结构条件句应用实践

Posted cuiyongchao007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本之九:case结构条件句应用实践相关的知识,希望对你有一定的参考价值。

九、case结构条件句应用实践

(一)case语法结构

case结构条件句相当于多分支if条件语句,但是它比这些条件句看起来更规范工整,常被用于实现系统服务脚本等应用场景中。

case语句的语法结构:

case "变量" in
      值1)
          指令1
          ;;
       值2)
          指令2
          ;;
       值3)
          指令3
          ;;
        *)
          指令4
 esac

(二)实例,case应用:

[root@centos6-kvm3 scripts]# cat 09-03.sh
#!/bin/bash
cat <<EOF
1.install lnmp
2.install lamp
3.exit
EOF
read -p "请输入一个数字{1|2|3}:" num
expr $num + 2 &>/dev/null
if [ $? -ne 0 ]
then
  echo "usage:$0{1|2|3}"
  exit 1
fi
case $num in
     1)
     echo "install lnmp"
     ;;
     2)
     echo "install lamp"
     ;;
     3)
     echo "exit"
     exit
     ;;
     *)
     echo "usage:$0{1|2|3}"
     exit 1
esac

(三)实例,不同的分支字体颜色不同:

当用户输入对应的数字选择水果的时候,告诉他选择的水果是什么,并给水果单词加上一种颜色(随意),要求用case语句实现。

内容的颜色用数字表示,范围为30-37,每个数字代表一种颜色。
echo -e "33[30m 黑色字oldboy trainning 33[0m" #<==30m表示黑色字。
echo -e "33[31m 红色字oldboy trainning 33[0m" #<==31m表示红色字。
echo -e "33[32m 绿色字oldboy trainning 33[0m" #<==32m表示绿色字。
echo -e "33[33m 棕色字oldboy trainning 33[0m" #<==33m表示棕色字(brown),和黄色字相近。
echo -e "33[34m 蓝色字oldboy trainning 33[0m" #<==34m表示蓝色字。
echo -e "33[35m 洋红字oldboy trainning 33[0m" #<==35m表示洋红色字(magenta),和紫色字相近。
echo -e "33[36m 蓝绿色oldboy trainning 33[0m" #<==36m表示蓝绿色字(cyan),和浅蓝色字相近。
echo -e "33[37m 白色字oldboy trainning 33[0m" #<==37m表示白色字。

1、基础脚本1:

[root@centos6-kvm3 scripts]# cat 09-04.sh
#!/bin/bash
cat <<EOF
1.apple
2.pear
3.banana
4.cherry
EOF
read -p "请输入一个数字{1|2|3|4}:" num
expr $num + 2 &>/dev/null
if [ $? -ne 0 ]
then
   echo "usage:$0 {1|2|3|4}"
   exit 1
fi
case $num in
   1)
   echo -e "33[31m apple 33[0m"
   ;;
   2)
   echo -e "33[32m pear 33[0m"
   ;;
   3)
   echo -e "33[33m banana 33[0m"
   ;;
   4)
   echo -e "33[34m cherry 33[0m"
   ;;
   *)
   echo "usage:$0 {1|2|3|4}"
   exit
esac
[root@centos6-kvm3 scripts]# 

2、高级脚本2(带颜色):

颜色函数:
[root@centos6-kvm3 scripts]# cat color.sh
#!/bin/bash
red="33[31m"
green="33[32m"
yellow="33[33m"
blue="33[34m"
tail="33[0m"
color(){
case $1 in
     red)
     echo -e "${red}$2${tail}"
     ;;
     green)
     echo -e "${green}$2${tail}"
     ;;
     yellow)
     echo -e "${yellow}$2${tail}"
     ;;
     blue)
     echo -e "${blue}$2${tail}"
     ;;
     *)
     echo "usage:$0 please input right content"
esac

}
color $*
[root@centos6-kvm3 scripts]# 
功能调用颜色函数:
[root@centos6-kvm3 scripts]# cat  09-04.sh 
#!/bin/bash
. ./color.sh
cat <<EOF
1.apple
2.pear
3.banana
4.cherry
EOF
read -p "请输入一个数字{1|2|3|4}:" num
expr $num + 2 &>/dev/null
if [ $? -ne 0 ]
then
   echo "usage:$0 {1|2|3|4}"
   exit 1
fi
case $num in
   1)
   color red apple
   ;;
   2)
   color green pear
   ;;
   3)
   color yellow banana
   ;;
   4)
   color blue cheryy
   ;;
   *)
   echo "usage:$0 {1|2|3|4}"
   exit
esac
[root@centos6-kvm3 scripts]# 

字体背景颜色

字的背景颜色对应的数字范围为40-47,代码如下。
echo -e "33[40;37m 黑底白字oldboy33[0m"   #<==40m表示黑色背景。
echo -e "33[41;37m 红底白字oldboy33[0m"   #<==41m表示红色背景。
echo -e "33[42;37m 绿底白字oldboy33[0m"   #<==42m表示绿色背景。
echo -e "33[43;37m 棕底白字oldboy33[0m"   #<==43m表示棕色背景(brown),和黄色背景相近。
echo -e "33[44;37m 蓝底白字oldboy33[0m"   #<==44m表示蓝色背景。
echo -e "33[45;37m 洋红底白字oldboy33[0m"  #<==45m表示洋红色背景(magenta),和紫色背景相近。
echo -e "33[46;37m蓝绿底白字oldboy33[0m"   #<==46m表示蓝绿色背景(cyan),和浅蓝色背景相近。
echo -e "33[47;30m 白底黑字oldboy33[0m"    #<==47m表示白色背景。

(四)rsync启动基本脚本实例:

[root@centos6-kvm3 scripts]# cat rsync.sh
#!/bin/bash
case $1 in
     start)
     rsync --daemon
     if [ $? -eq 0 ]
     then
        echo "rsync $1 ok"
     else
        echo "rsync $1 fail"
     fi
     ;;
     stop)
     killall rsync
     if [ $? -eq 0 ]
     then
        echo "rsync $1 ok"
     else
        echo "rsync $1 fail"
     fi
     ;;
     restart)
     killall rsync && sleep 1 && rsync --daemon
     if [ $? -eq 0 ]
     then
        echo "rsync $1 ok"
     else
        echo "rsync $1 fail"
     fi
     ;;
     *)
     echo "usage:$0 {start|stop|restart}"
esac

查看进程:lsof -i:873

rsync启动高级脚本:

cp rsyncd.sh /etc/init.d/rsyncd

chkconfig --list rsyncd

chkconfig --add rsyncd

chmod +x /etc/init.d/rsyncd

(五)rsync启动脚本之高阶

[root@centos6-kvm3 scripts]# cat rsyncd.sh 
# chkconfig: 2345 20 80
# description: rsync start stop
#!/bin/bash
. /etc/init.d/functions
start(){
    rsync --daemon
    retval=$?
    if [ $retval -eq 0 ]
     then
        action  "rsync start ok" /bin/true
        return $retval
    else
        action "rsync start fail" /bin/false
        return $retval
    fi
}
stop(){
     killall rsync &>/dev/null
     retval=$?
     if [ $retval -eq 0 ]
     then
        action "rsync stop ok" /bin/true
        return $retval
     else
        action "rsync stop fail" /bin/false
        return $retval
     fi
}
case $1 in
     start)
     start
     retval=$?
     ;;
     stop)
     stop
     retval=$?
     ;;
     restart)
     stop 
     sleep 2
     start
     retval=$?
     ;;
     *)
     echo "usage:$0 {start|stop|restart}"
esac
exit $retval

以上是关于shell脚本之九:case结构条件句应用实践的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本应用

Shell脚本------条件语句(条件测试,if语句,case语句)

shell脚本——编程条件语句(条件测试if语句case分支语句)

Shell脚本应用

Shell脚本练习----条件语句(if case语句的应用)

1.4- 定时任务总结之九句箴言