Linux中sh脚本case条件语句用法

case语句适用于需要进行多重分支的应用情况。
        case分支语句的格式如下:
            case 变量名 in
                模式1)
            命令序列1
            ;;
                模式2)
            命令序列2
         ;;
                *)
            默认执行的命令序列
            esac
        case语句结构特点如下:
        case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。
        双分号“;;”表示命令序列结束。
        匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
        最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后
    的命令序列。
 
case语句实例:由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符,
并输出相应的提示信息。

#!/bin/bash
read -p "press some key ,then press return :" KEY
case $KEY in
[a-z]|[A-Z])
echo "It's a letter."
;;
[0-9])
echo "It's a digit."
;;
*)
echo "It's function keys、Spacebar or other ksys."
esac
 
######################################################
case word in [ pattern [ | pattern ] ... ) list ;; ] ... esac
 case/esac的标准用法大致如下:
 case $arg in
     pattern | sample) # arg in pattern or sample
     ;;
     pattern1) # arg in pattern1
     ;;
     *) #default
     ;;
 esac
 arg是您所引入的参数,如果arg内容符合pattern项目的话,
 那麽便会执行pattern以下的程式码,而该段程式码则以两个分号";;"做结尾。

 可以注意到"case"及"esac"是对称的,如果记不起来的话,把"case"颠倒过来即可。

 

 --------------------------------------------------------------------------------

 例一 : paranoia
 #!/bin/sh
 case $1 in
         start | begin)
           echo "start something"
         ;;
         stop | end)
           echo "stop something"
         ;;
         *)
           echo "Ignorant"
         ;;
 esac

 执行
 [foxman@foxman bash]# chmod 755 paranoia
 [foxman@foxman bash]# ./paranoia
 Ignorant
 [foxman@foxman bash]# ./paranoia start
 start something
 [foxman@foxman bash]# ./paranoia begin
 start something
 [foxman@foxman bash]# ./paranoia stop
 stop something
 [foxman@foxman bash]# ./paranoia end
 stop something

 --------------------------------------------------------------------------------

 例二 : inetpanel
 许多的daemon都会附上一个管理用的Shell Script,
 像BIND就附上ndc,Apache就附上apachectl。这些管理程式都是用shell script来写的,
 以下示一个管理inetd的shell script。
 #!/bin/sh

 case $1 in
     start | begin | commence)
        /usr/sbin/inetd
     ;;
     stop | end | destroy)
        killall inetd
     ;;
     restart | again)
        killall -HUP inetd
     ;;
     *)
        echo "usage: inetpanel [start | begin | commence | stop | end | destory | restart | again]"
     ;;
 esac

 

 --------------------------------------------------------------------------------

 例三 : 判断系统
 有时候,您所写的Script可能会跨越好几种平台,
 如Linux、FreeBSD、Solaris等等,而各平台之间,
 多多少少都有不同之处,有时候需要判断目前正在那一种平台上执行。
 此时,我们可以利用uname来找出系统资讯。
 #!/bin/sh

 SYSTEM=`uname -s`

 case $SYSTEM in
     Linux)
         echo "My system is Linux"
         echo "Do Linux stuff here..."
     ;;
     FreeBSD)
         echo "My system is FreeBSD"
         echo "Do FreeBSD stuff here..."
     ;;
     *)
         echo "Unknown system : $SYSTEM"
         echo "I don't what to do..."
     ;;
 esac
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

总结:

对变量使用""并不是强制的, 因为不会发生单词分割.
每句测试行, 都以右小括号)来结尾.
每个条件判断语句块都以一对分号结尾 ;;.
case块以esac (case的反向拼写)结尾.

时间: 2024-07-30 10:20:52

Linux中sh脚本case条件语句用法的相关文章

python-求助各位~一个有关linux中.sh脚本里写循环的问题,谢谢O(∩_∩)O~

问题描述 求助各位~一个有关linux中.sh脚本里写循环的问题,谢谢O(∩_∩)O~ a = [""name1""name2""name3""......""name100""] for i in 路径/*.py #这个路径底下有100个python脚本名字不同,代码一样do 我需要把每个python文件打开,改动一行if name = """"

thinkPHP模板中for循环与switch语句用法示例_php实例

本文实例讲述了thinkPHP模板中for循环与switch语句用法.分享给大家供大家参考,具体如下: 1.for用法 <for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" > </for> 案例 <for start="1" end="100"> {$i}

应用-Linux中shell脚本问题

问题描述 Linux中shell脚本问题 ]我有shell脚本,放在/bin/目录下,内容如下: #!/bin/sh cd /usr /sbin/insmod s3c_ts.ko ./digitpic ./MSYH.TTF & 当我开发板上电以后我手动执行手动执行test.sh 我的digitpic应用程序能够正常启动 当我在/etc/init.d/rcS 文本里面最后添加exec test.sh 提示说这个触摸屏读取错误,也就是/sbin/insmod s3c_ts.ko这部分错误了,就只有触

python 分支,循环,条件语句用法

python 分支,循环,条件语句用法 我学习了两种数据类型,1种是数字,1种是字符串.数字可以做数学运算,字符串呢可以处 理文本信息.其中数字又分为,整数,浮点数.字符串当然就是字符串了.整数,浮点数就 是描述数字的数据类型.然后呢,要做一些有意义的事情的话,就需要把这些组合起来进行 一些处理了(就是表达式了).还要注意,python解释器在做解释之前做了数据类型的检查 ,比如数字和字符串是不能相加的,如果要相加必须用str()等函数转换为字符串才行哦.但 是为什么python解释器不默认把这

linux中mount/umount命令的基本用法及开机自动挂载方法_Linux

本文介绍了linux中mount/umount命令的基本用法及开机自动挂载,具体方法如下: mount命令格式如下: 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有: -a 安装在/etc/fstab文件中类出的所有文件系统. -f 伪装mount,作出检查设备和目录的样子,但并不真正挂载文件系统. -n 不把安装记录在/etc/mtab 文件中. -r 讲文件系统安装为只读. -v 详细显示安装信息. -w 将文件系统安装为可写,为命令默认情况. -t <文件系统类型

linux中shell脚本导出备份mysql数据库

最近公司有个需求需要从mysql数据库中查询状态为60的数据并导出. 实例代码如下: #!/bin/bash   dir="/cache1" ##要存到导出数据的目录名 open="open" ##导出数据的文件名称 open_dir="${open}.$(date +%Y%m%d)" ##导出数据的文件名称,按日期区分 db="/opt/trustedm/mysql/current/bin/mysql -uroot -pmv_XQ_m

linux中scp命令和scp命令用法大全_linux shell

scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要的话. svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解   名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source

linux中git和github的基本用法

git config --global user.name "woaigithub" git config --global user.email "jorden008@gmail.com" //新建公钥和私钥 ssh-keygen -C "jorden008@gmail.com" -t rsa //显示公钥内容,拷贝到github的settings的public key中 cat /home/andy/.ssh/id_rsa.pub //测试和

linux中shell脚本实现下载完关机_linux shell

用mint 有一段时间了,下载基本用firefox,有时下载几个G的游戏.可是firefox没有找到下载完关机的选择.处于这个原因,写了这个. download_shutdown.sh #!/bin/bash # Created By: Demo <demo@demo.com> # Created Time: 2015-01-30 12:36:44 # Modified Time: 2015-01-30 12:54:21 dir=$1 while [ "1" ] do if