多分支语句之case,及shift使用

有时候一个长的if语句会让一个程序变得非常难读,有了case后,可以使case语句变得更加简洁

case语法格式如下:

case expression in
pattern1)
    suite1 
    ;;
pattern2)
    suite2
    ;;
...
patternn)
    suiten
    ;;
*)
    other_suite
    ;;
esac

case中各pattern可以使用模式:
    a|b: a或者b
    *:匹配任意长度的任意字符;
    ?:匹配任意单个字符;
    [-]:范围匹配

使用示例:

写一个脚本,接受如此格式
    script.sh {start|stop|restart|status}
1、如是start,那么创建/var/lock/subsys/script.sh,显示启动成功;
2、如果参数是stop,则删除/var/lock/subsys/script.sh,显示停止成功
3、如果restart,则删除,再创建,显示成功;
4、如果status, 如果文件存在,则显示running,否则,显示stopped

#!/bin/bash
script=$0
lockfile=/var/lock/subsys/script.sh
[ $# -lt 1 ] && echo "usage: $script {start|stop|restart|staus}" && exit 6
case $1 in
  start)
        touch $lockfile
        echo "$script service start"
        ;;
  stop)
        rm -f $lockfile
        echo "$script service stop"
        ;;
  restart)
        rm -f $lockfile
        touch $lockfile
        echo "$scrtip service restart"
        ;;
  status)
        if [ -f $lockfile ];then
          echo "$script service is running"
        else
          echo "$script service is stop"
        fi
        ;;
  *)
        echo "usage: $script {start|stop|restart|staus}"        
        ;;
esac

写一个简单脚本
1、提示用户输入一个任意字符;
2、能判断此字符是数字、字母或特殊字符;

#!/bin/bash
#
while true;do
read -p "enter a char: " char
 [[ "$char" == "quit" ]] && exit 8
case $char in
  [1-9])
        echo "$char is digit"
        ;;
  [a-z])
        echo "$char is letter"
        ;;
   *)
        echo "special"
esac
done

写一个脚本,能对/etc/目录进行打包备份,备份位置为/backup/etc-日期.后缀
1、显示如下菜单给用户:
xz) xz compress
gzip) gzip compress
bip2) bzip2 compress
2、根据用户指定的压缩工具使用tar打包压缩;
3、默认为xz;输入错误则需要用户重新输入;

#!/bin/bash
#
dir="/etc/*"
bak="/backup/etc-"
[ -d backup ] || mkdir /backup
cat << EOF
xz) xz compress
gzip) gzip compress
bzip2) bzip2 compress
EOF
while true;do
read -p "please enter a tool: " tools
tools=${tools:-xz}
case $tools in
  xz)
        backuptools=J
        end=xz
        break
        ;;
  gzip)
        backuptools=z
        end=gz
        break
        ;;
  bzip2)
        backuptools=j
        end=bz2
        break
        ;;
  *)
        echo "wrong option,please enter again"
esac
done
 tar -c${backuptools}f ${bak}`date +%F-%T`.$end $dir

写一个脚本,完成如下功能
说明:此脚本能够为指定网卡创建别名,指定地址;使用格式:mkethalias.sh -v|--verbose -i|--interface ethX
1|-i选项用于指定网卡;
2、如果网卡存在:在命令行,请用户指定一个别名;
3、让用户指定IP和掩码;
4、用户可以同时使用-v或--verbose选项:如果使用了,则在配置完成后,显示配置结果;否则,则不予显示;

#!/bin/bash
#
debug=0
[ $# -lt 1 ] && echo "usage: $0 {-v|--verbose -i|--interface ethX}"
while [ $# -ge 1 ];do
 case $1 in
   -v|--verbose)
        debug=1
        shift 1 ;;
   -i|--interface)
        interface=$2
        shift 2 ;;
    *)
        echo "usage: $0 {-v|--verbose -i|--interface ethX}"
        shift $*
        ;;
 esac
done
#echo "$interface $debug"
if ! ip link show $interface &> /dev/null;then
        echo "networkcard no such"
        exit 6
fi
read -p "please enter network_alias: " network_alias
read -p "please enter IPaddr: " IPaddr
read -p "please enter netmask: " netmask
ip addr add dev $interface ${IPaddr}/${netmask} label $network_alias
[ "$debug" -eq 1 ] && ip addr show $interface || echo "setup successfuly"
时间: 2024-12-29 04:10:05

多分支语句之case,及shift使用的相关文章

分支语句(switch case)

/switch case 的应用 Console.WriteLine("1.汉堡包"); Console.WriteLine("2.薯条"); Console.WriteLine("3.鸡块"); Console.WriteLine("4.鸡腿"); Console.WriteLine("5.鸡米花"); Console.Write("请输入您的选择项目数字:"); string a =

C# 语句 分支语句 switch----case----.

第二种分支语句  switch..case. switch(一个变量){ case 值:要执行的代码段;break; case 值:要执行的代码段;break; ... ... ... default:要执行的代码段;break; //default可有可无,对应else } ●switch case 必须与 break 一同使用.break是跳转语句.与switch case连用的时候是跳出最近的{}. ●若case后面接收的是字符串类型(string),需要:case "1": ●

python中的条件语句,分支语句以及逻辑运算符和比较运算符

python中的if与else语句可执行简单测试 如: a = 3; b = 5; if a<b:     print('a小b大') else:     print('a大b小') 答案输出: a小b大 我对条件判断if的理解:     所谓条件判断其实就是 如果 a<b 我们做相应的处理 否则(a大于b的情况) 我们对a>b做出相应的处理  我们在判断某个变量或者某个表达式 只对真的时候作出相应的处理时else是可选的 比如: name = '张三' isMarry = 'true'

【2-23】分支语句(switch…case)及循环语句

Switch-case分支语句与if语句作用相同,但需将情况都罗列出比较麻烦所以不常用. 其基本结构是: Switch(一个变量值) { Case 值1:要执行的代码段:break; Case 值2:要执行的代码段:break; --. Default:(否则) 要执行的代码段:break: } 循环语句 循环语句主要有for/while/foreach 循环语句的结构可分为四部分即四要素:初始条件,循环条件,循环体,状态改变 结构为: for(初始条件:循环条件:状态改变) { 循环体 } 例

分支语句 if...else switch..case...break

语句:1.顺序语句2.分支语句3.循环语句 基本格式: if(bool的表达式) { 代码 } else if(bool的表达式) { 代码 } else { Console.WriteLine("我没有想到的问题.") // 判断自己思路是否有遗漏. } else if 不可以写在 else 后面. --------------------------------------------------------if(...){} if(...){} if(...){} 这样的结构属于

运算符 与 分支语句:if ,else if,else;switch case

分支语句: if        else if       else      :    switch          case --如何使用 if  else if  else: Console.WriteLine("请你出拳"); --输出[请你出拳]            int a = Convert.ToInt32(Console.ReadLine()); --定义一个变量a            Random i = new Random(); --随机数        

输出,变量的使用,子查询,逻辑语句,循环,case..when..then..end多分支语句,Exists(判断存在)

--------------输出----------------print 'hello world'--以文本形式输出select 'hello world'--以网格形式输出,也可以设置成以文本形式输出print 'abc'+'cde'print 3+5print 'ab'+5--出错,'ab'不能转换为intprint 'ab'+convert(varchar,5)--输出ab5print '2'+5--输出7,因为'2'能自动转换为整型数据2 ----------------局部变量--

Shell脚本之for、while循环语句和case分支语句

shell作为一种脚本编程语言,同样包含循环.分支等其他程序控制结构,从而轻松完成更加复杂.强大的功能 使用for循环语句 在工作中,经常遇到某项任务需要多次执行,而每次执行仅仅是处理对象不一样,其他命令都相同.使用简单的if语句已经难以满足要求,编写全部代码将困难重重,而for循环语句将很好的解决类似的问题 1. for语句的结构 使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令,直到变量值用完退出循环 案例1:根据姓名列表批量建立用户 [[ema

Shell脚本 (三)for循环 while循环 case分支语句

################for循环语句的结构#############使用for循环语句时,需要指定一个变量及可能的取值列表,针对每个不同的取值重复执行相同的命令序列,直到变量值用完退出循环.在这里,取值表 称为for语句的执行条件,其中包括多个属性相同的对象.需要预先指定(如通讯录.IP黑名单)·语法样式for 变量名 in 取值列表do 命令序列done·#####for循环语句列子####需求:根据人事部门给出的员工姓名拼音列表,在Linux服务器中添加相应的用户账号,初始密码均设