shell流控制:http://www.cnblogs.com/yunjiaofeifei/archive/2012/06/12/2546208.html

1、if then else
语句

if then else语句的基本格式如下:

if 条件1

then 命令1

elif 条件2

then 命令2

else 命令3

fi

if语句以if开头,而以fi结束,在shell中的控制流结构的分支语句都是像这样开头跟结束的语句相反反过来,如下面的case语句,以case开头,以esac结束。elif即C语言的else
if的意思。如果你只有一个条件,就没必要用到elif、else了。

一个例子:

#!/bin/sh

#iftest

if [ “10” -lt “12” ]

then

echo “yes,10 is less than 12”

fi

执行一下iftest

$./iftest

yes,10 is less than 12

其中,[]是测试命令,测试里面的内容是真还是假,如果真,则该测试命令返回的结果是真,如果为假则返回假。注意:[]与中间的内容一定要在两边各留一个空格,否则会出错。如[“10” -lt “12”]这样是错误的写法,一定要在两边各留一个空格才是测试命令。

因为在shell中,所有的命令执行后都有一个返回值,if是接收到该返回值作为它的条件。平时执行ls、cp、touch、mkdir等等这些命令时系统都会返回一个值表示执行该命令是否成功,该返回值就保存在$?这里了,如果你要看它的值就可以用:echo
$?来查看了。如:

$ls

a.txt b.doc

$echo $?

0

在linux中一般用0表示执行成功,而非0则表示失败。如:

if ls

then

echo “Yes”

else

echo “no”

fi

该程序执行后的结果将会打印出Yes。这里ls执行成功后返回的值为0(成功),if接收到成功信号则其条件为真,所以就打印出Yes了。这里不要跟C的if混淆了,在C中0为假,非0为真,而这里倒反过来了,0为真,非0则为假了。这个就涉及到linux的习惯了,因为linux习惯用0来表示成功,非0表示失败。这里还要小心,不能像这样用:if
(“10” -lt“12”)。上面的[“10”
-lt “12” ]也是一个命令来的,相当于命令:test“10” -lt
“12”。test是一个测试命令,如果要讲测试命令还有很多要讲,这里就直接讲控制流结构,至于测试命令有空再写了。

2、case 语句

case语句的格式如下:

case 值 in

模式1)

命令1

...

;;

模式2)

命令2

...

;;

......

esac

上面的;;有点相当于C中case中的break语句的意味了,即执行完该模式后跳出case语句,不过有点不同的就是,shell中的case语句如果没有;;就会报错。

shell的case语句可以使用匹配模式,是元字符匹配模式,而不是正则表达式的匹配:

* 匹配所有的字符

? 匹配单个字符

[...]匹配[]括起的字符

所以在C中使用default模式的,这里可以使用*来代替如:

$cat casetest

#!/bin/sh

#casetest

echo "please input number 1 to 3"

read number

case $number in

1)

echo "you input 1"

;;

2)

echo "you input 2"

;;

3)

echo "you input 3"

;;

*)

echo "error! the number you input isn't 1 to 3"

;;

esac

执行这个shell脚本,如果你输入的是1~3外的数字,都将输出error! the number you input isn't 1 to 3这句。这里的*就是匹配所有模式。从前面开始执行,如果它不匹配于前面的任何一种模式,则会匹配到这里的*,结果就自然输出error! the number you input isn't 1 to 3这句了。case语句中的模式中还可以使用|(或),如:

$cat casetest

#!/bin/sh

#casetest

echo "please input number 1 to 10"

read number

case $number in

1|2|3)

echo "the number you input is 1~3"

;;

4|5|6)

echo "the number you input is 4~6"

;;

7|8|9|10)

echo "the number you input is 7~10"

;;

*)

echo "error! the number you input isn't 1 to 10"

;;

esac

这样无论你输出的是1,还是2,还是3都会输出第一句话,无论你输出的是4,还是5,还是6输出的都是第二句话,如此类推。最后来一个经典的例子:

$cat caseparam

#!/bin/sh

#caseparam

if [ $# != 1 ]

then

echo "Usage:`basename $0` [start|stop|help]" >&2

exit 1

fi

OPT=$1

case $OPT in

start)

echo "start..`basename $0`"

;;

stop)

echo "stop..`basename $0`"

;;

help)

echo "now don't support help"

;;

*)

echo "Usage:`basename $0` [start|stop|help]"

;;

esac

执行这个程序如果用./caseparam则输出:Usage:caseparam [start|stop|help] ;如果用./caseparam start 则输出:start..caseparam;如果用./caseparam stop则输出:stop..caseparam等等,以此类推。上面的$#是计算参数的个数,所以如果参数个数不等于1的话,该程序则退出。这个程序是不是感觉好熟悉呢?一般在/etc/init.d/下面的程序都是这种start、stop、restart...这种格式的。

shell的case语句简述(shell的流控制)的更多相关文章

  1. (二)shell中case语句、程序传参、while

    2.2.6.1.case语句(1)shell中的case语句和C语言中的switch case语句作用一样,格式有差异(2)shell中的case语句天生没有break,也不需要break,和C语言中 ...

  2. Shell 编程 case语句

    本篇主要写一些shell脚本case语句的使用. 字符判断 #!/bin/bash read -p "请输入一个字符:" char case $char in [a-z]|[A-Z ...

  3. linux bash shell中case语句的实例

    本文介绍下,在bash shell编程中,有关case语句的一个例子,学习下case语句的用法,有需要的朋友参考下. 本文转自:http://www.jbxue.com/article/13377.h ...

  4. shell的case语句

    case语句格式 # vi test.sh : echo "input : " read num echo "the input data is $num" c ...

  5. Shell脚本case语句

    case语句格式 case 变量 in PAT1) 执行语句 ;; PAT2) 执行语句 ;; *) 默认执行语句 ;; esac 使用示例: 编写一个shell脚本,通过提示用户输入信息,输出cpu ...

  6. Linux Shell编程case语句

    http://blog.csdn.net/dreamtdp/article/details/8048720 case语句适用于需要进行多重分支的应用情况. case分支语句的格式如下: case $变 ...

  7. 【shell】case语句

    case只能判断一种条件关系,而if能判断多种条件关系 #!/bin/bash read -p "please input your choice (high/middle/low):&qu ...

  8. shell编程:case语句

  9. SHELL用法五(Case语句)

    1.SHELL编程Case语句案例实战 1)Case选择条件语句的格式: case $INPUT in Pattern1) 语句1 ;; Pattern2) 语句2 ;; esac 2)Case语句企 ...

随机推荐

  1. python字典无限遍历

    #无限遍历dict,通过key获取value,嵌套字典存在多个相同的key,可获取多个key class getValues(object): def __init__(self): pass #无限 ...

  2. 游戏流程&游戏规则

  3. Nginx 配置HTTPS 与Node.js 配置HTTPS方法

    前段时间公司网站要求加上HTTPS安全CA证书,公司服务器全是阿里云服务器,并且配有负载均衡,所以选择直接在阿里云购买CA证书,阿里云有一种证书可以免费试用一年,决定申请此证书,阿里云证书需要验证,阿 ...

  4. JavaScript 函数定义

    JavaScript 使用关键字 function 定义函数. 函数可以通过声明定义,也可以是一个表达式. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function function ...

  5. mysql 跨服务器复制数据库

    比较了下,还是采用ssh的方式最简单.比如传数据库test_db mysqldump --databases test_db| ssh 121.121.121.121 test_db

  6. Dynamics CRM Trigger plugin for N:N relationships

    博客原文:https://demystifyingcrm.wordpress.com/2014/12/17/trigger-plugin-for-nn-relationships-in-dynamic ...

  7. Java进阶(四十五)java 字节流与字符流的区别

    java 字节流与字符流的区别(转载)   字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?   实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作 ...

  8. Java提升篇之反射的原理

    Java提升篇之反射的原理 1.构造方法的反射 import java.lang.reflect.Constructor; public class ReflectConstructor { publ ...

  9. Hive-ORC文件存储格式

    ORC文件格式是从Hive-0.11版本开始的.关于ORC文件格式的官方文档,以及基于官方文档的翻译内容这里就不赘述了,有兴趣的可以仔细研究了解一下.本文接下来根据论文<Major Techni ...

  10. EBS开发常用编译命令

    一.编译FORM 1.将脚本写成shell脚本 cd $AU_TOP/forms/ZHS export FORMS_PATH=.:$FORMS_PATH:$AU_TOP/forms/ZHS frmcm ...