Shell case流程控制

Shell case流程控制

case语句介绍

case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。

可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

在某些时候,case要优于if,少写很多判断

语法

case 变量 in
  )
    comand
    ;;
  )
    comand
    ;;
esac

例:
case $1 in
  start)
    start_rsync
    ;;
  stop)
    stop_rsync
    ;;
  restart)
    restart_rsync
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
esac

case练习

输入阿拉伯数字或者英文,输出中文大写数字

## if
num=$1
if [ $num == 1 -o $num == 'one' ];then
  echo '壹'
elif [ $num == 2 -o $num == 'two' ];then
  echo '贰'
elif [ $num == 3 -o $num == 'three' ];then
  echo '叁'
elif [ $num == 4 -o $num == 'four' ];then
  echo '肆'
elif [ $num == 5 -o $num == 'five' ];then
  echo '伍'
elif [ $num == 6 -o $num == 'six' ];then
  echo '陆'
elif [ $num == 7 -o $num == 'seven' ];then
  echo '柒'
elif [ $num == 8 -o $num == 'eight' ];then
  echo '捌'
elif [ $num == 9 -o $num == 'nine' ];then
  echo '玖'
elif [ $num == 10 -o $num == 'ten' ];then
  echo '拾'
else
  echo '请输入1-10的数字'
fi

## case
num=$1
case $num in
  1|one)
    echo '壹'
    ;;
  2|two)
    echo '贰'
    ;;
  3|three)
    echo '叁'
    ;;
  4|four)
    echo '肆'
    ;;
  5|five)
    echo '伍'
    ;;
  6|six)
    echo '陆'
    ;;
  7|seven)
    echo '柒'
    ;;
  8|eight)
    echo '捌'
    ;;
  9|nine)
    echo '玖'
    ;;
  10|ten)
    echo '拾'
esac

## 接收多个参数
num=$*

for n in $num;do
  case $n in
    1|one)
      echo '壹'
      ;;
    2|two)
      echo '贰'
      ;;
    3|three)
      echo '叁'
      ;;
    4|four)
      echo '肆'
      ;;
    5|five)
      echo '伍'
      ;;
    6|six)
      echo '陆'
      ;;
    7|seven)
      echo '柒'
      ;;
    8|eight)
      echo '捌'
      ;;
    9|nine)
      echo '玖'
      ;;
    10|ten)
      echo '拾'
      ;;
    *)
      echo "Usage: $0 {1..10} or {one..ten}"
  esac
done

shwll中加颜色

加颜色固定格式
\e[条件 \e[条件
\033[1;31m \033[0m
\e[1;31m \e[0m
1:字体选项
31m:字体颜色
0m:背景颜色

echo -e '\e[1;31m 红色的zls \e[0m'
echo -e '\e[2;31m 红色的zls \e[0m'
echo -e '\e[2;31m 红色的yuzong \e[0m'
echo -e '\e[2;32m 红色的yuzong \e[0m'
echo -e '\e[2;33m 红色的yuzong \e[0m'
echo -e '\e[5;33m 红色的yuzong \e[0m'
echo -e '\e[1;5;33m 红色的yuzong \e[0m'
echo -e '\e[1;5;33m 红色的yuzong \e[31m'
echo -e '\e[1;5;33m 红色的yuzong \e[41m'
echo -e '\e[1;5;33m 红色的yuzong \e[42m'
echo -e '\e[1;5;33m;41m 红色的yuzong \e[0m'
echo -e '\e[1;5;41;33m 红色的yuzong \e[0m'
echo -e '\e[1;5;41;32m 红色的yuzong \e[0m'
echo -e '\e[1;5;42;32m 红色的yuzong \e[0m'

cat <<EOF
1.apple
2.pear
3.banana
4.cherry
5.orange
6.watermalon
7.grapes
EOF

read -p "请输入水果名或菜单编号: " name
case $name in
  1|apple)
    echo -e '\e[1;31m apple \e[0m'
    ;;
  2|pear)
    echo -e '\e[1;37m pear \e[0m'
    ;;
  3|banana)
    echo -e "\e[1;33m banana \e[0m"
    ;;
  4|cherry)
    echo -e "\e[1;31m cherry \e[0m"
    ;;
  5|orange)
    echo -e "\e[1;42;33m orange \e[0m"
    ;;
  6|watermalon)
    echo -e "\e[1;42;30m watermalon \e[0m"
    ;;
  7|grapes)
    echo -e "\e[1;35m grapes \e[0m"
    ;;
  *)
    echo "Usage: $0 看菜单"
esac

练习

用户可以哦输入任意字符串,根据菜单,給字符串加颜色

#!/bin/bash

cat <<EOF
  1.red
  2.green
  3.blue
  4.black
  5.purple
  6.yellow
  7.white
  8.lightblue
EOF

red="\e[1;31m"
green="\e[1;32m"
blue="\e[1;34m"
black="\e[1;30m"
purple="\e[1;35m"
yellow="\e[1;33m"
white="\e[1;37m"
ligthblue="\e[1;36m"
end="\e[0m"

read -p 'Please input string and color ' str color
case $color in
  1|red)
    echo -e "$red $str $end"
    ;;
  2|green)
    echo -e "$green $str $end"
    ;;
  3|blue)
    echo -e "$blue $str $end"
    ;;
  4|black)
    echo -e "$black $str $end"
    ;;
  5|purple)
    echo -e "$purple $str $end"
    ;;
  6|yellow)
    echo -e "$yellow $str $end"
    ;;
  7|white)
    echo -e "$white $str $end"
    ;;
  8|lightblue)
    echo -e "$lightblue $str $end"
    ;;
  *)
    echo "Usage: $0 没有该颜色"
esac

简易版跳板机

#!/bin/bash
. /etc/init.d/functions
lb01=10.0.0.5
lb02=10.0.0.6
web01=10.0.0.7
web02=10.0.0.8
web03=10.0.0.9
nfs=10.0.0.31
backup=10.0.0.41
db01=10.0.0.51
db02=10.0.0.52
db03=10.0.0.53
zabbix=10.0.0.71
m01=10.0.0.61

trap "" HUP INT TSTP
menu(){
  cat <<EOF
  1.lb01 $lb01
  2.lb02 $lb02
  3.web01 $web01
  4.web02 $web02
  5.web03 $web03
  6.nfs $nfs
  7.backup $backup
  8.db01 $db01
  9.db02 $db02
  10.db03 $db03
  11.zabbix $zabbix
  12.m01 $m01
EOF
}

menu
while ture;do
  read -p "请输入跳板机编号或主机名: " jump_ip
  
  judge_ip(){
    jump_ip3=$1
    ping -c 1 -w 0.1 -i 0.1 $jump_ip3 &>/dev/null
    if [ $? -eq 0 ];then
      return 1
    fi
  }
  
  ssh_key(){
    jump_ip2=$1
    if [ ! -f ~/.ssh/id_rsa.pub ];then
      ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
    fi
    judge_ip $jump_ip2
    if [ ! -f ~/.ssh/id_rsa.pub ];then
      sshpass -p $passwd ssh-copy-id -i ~/.ssh/id_rsa.pub 172.16.1.$n -o StrictHostKeyChecking=no &>/dev/null
    else
      retuirn 1
    fi
  }
  
  ssh_judge(){
    jump_ip4=$1
    ssh_key $jump_ip4
    if [ $? -ne 1 ];then
      ssh $jump_ip4
    else
      action "$jump_ip4" /bin/false
    fi
  }
  
  case $jump_ip in
    1|lb01)
      ssh_judge $lb01
      ;;
    2|lb02)
      ssh_judge $lb02
      ;;
    3|web01)
      ssh_judge $web01
      ;;
    4|web02)
      ssh_judge $web02
      ;;
    5|web03)
      ssh_judge $web03
      ;;
    6|nfs)
      ssh_judge $nfs
      ;;
    7|backup)
      ssh_judge $backup
      ;;
    8|db01)
      ssh_judge $db01
      ;;
    9|db02)
      ssh_judge $db02
      ;;
    10|db03)
      ssh_judge $db03
      ;;
    11|zabbix)
      ssh_judge $zabbix
      ;;
    12|m01)
      ssh_judge $m01
      ;;
    close)
      read -p -s "请输入退出密码: " pass
      if [ $pass == '123' ];then
        break
      else
        echo "密码错误"
      fi
      ;;
    h|help)
      menu
      ;;
    *)
      echo "没有该主机"
  esac
done 
    
  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值