欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

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

程序员文章站 2022-07-09 18:59:17
九、case结构条件句应用实践 (一)case语法结构 case结构条件句相当于多分支if条件语句,但是它比这些条件句看起来更规范工整,常被用于实现系统服务脚本等应用场景中。 case语句的语法结构: (二)实例,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 "\033[30m 黑色字oldboy trainning \033[0m" #<==30m表示黑色字。
echo -e "\033[31m 红色字oldboy trainning \033[0m" #<==31m表示红色字。
echo -e "\033[32m 绿色字oldboy trainning \033[0m" #<==32m表示绿色字。
echo -e "\033[33m 棕色字oldboy trainning \033[0m" #<==33m表示棕色字(brown),和黄色字相近。
echo -e "\033[34m 蓝色字oldboy trainning \033[0m" #<==34m表示蓝色字。
echo -e "\033[35m 洋红字oldboy trainning \033[0m" #<==35m表示洋红色字(magenta),和紫色字相近。
echo -e "\033[36m 蓝绿色oldboy trainning \033[0m" #<==36m表示蓝绿色字(cyan),和浅蓝色字相近。
echo -e "\033[37m 白色字oldboy trainning \033[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 "\033[31m apple \033[0m"
   ;;
   2)
   echo -e "\033[32m pear \033[0m"
   ;;
   3)
   echo -e "\033[33m banana \033[0m"
   ;;
   4)
   echo -e "\033[34m cherry \033[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="\033[31m"
green="\033[32m"
yellow="\033[33m"
blue="\033[34m"
tail="\033[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 "\033[40;37m 黑底白字oldboy\033[0m"   #<==40m表示黑色背景。
echo -e "\033[41;37m 红底白字oldboy\033[0m"   #<==41m表示红色背景。
echo -e "\033[42;37m 绿底白字oldboy\033[0m"   #<==42m表示绿色背景。
echo -e "\033[43;37m 棕底白字oldboy\033[0m"   #<==43m表示棕色背景(brown),和黄色背景相近。
echo -e "\033[44;37m 蓝底白字oldboy\033[0m"   #<==44m表示蓝色背景。
echo -e "\033[45;37m 洋红底白字oldboy\033[0m"  #<==45m表示洋红色背景(magenta),和紫色背景相近。
echo -e "\033[46;37m蓝绿底白字oldboy\033[0m"   #<==46m表示蓝绿色背景(cyan),和浅蓝色背景相近。
echo -e "\033[47;30m 白底黑字oldboy\033[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
转自:https://www.cnblogs.com/cuiyongchao007/p/12799174.html