流程控制语句

简单的Shell 脚本还不能满足我们日常工作的需要要,因为他不能批量的帮我们完成工作,所以Shell引入了 if、for、while、case 4种流程控制语句来帮助我们完成工作。

if 条件判断语句

if 语句可以让脚本根据实际情况自动执行相应的命令,if语句可以为单分支结构双分支结构多分支结构

if 语句由 if,then,else,fi 等关键字组成,在符合条件之后才会执行 then后面的语句,否则会执行 else 后面语句。

if 语句的使用

    # 单分支结构
if [ 条件判断语句 ];
then
要执行的语句
fi # 双分支结构
if [ 条件判断语句 ];
then
符合条件执行的语句
else
不符合条件执行的语句
fi # 多分支结构
if [ 条件判断语句 ];
then
符合条件执行的语句
elif [ 条件判断语句 ]
符合条件执行的语句
else
不符合条件执行的语句
fi

test.sh 判断是否存在这个目录,不存在则创建

    #!/bin/bash
TEST_DIR="/mnt/test/"
if [ ! -e $TEST_DIR ];
then
mkdir -p $TEST_DIR
fi

test02.sh 判断一个IP是否能ping通

    #!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
if [ $? -eq 0 ];
then
echo "Host $1 is on-line"
else
echo "Host $1 is off-line"
fi

ping 命令的 -c 参数为指定请求次数为3次,请求的间隔为 0.3 秒,请求超时的时长为 3 秒,$? 命令的意思是获取上一次执行的命令的结果。0为正确,其余的都为错误。

test03.sh 可以直接使用命令的执行结果进行判断

    #!/bin/bash
if [ `ps -ef | grep mysql | grep -v grep` ];then
echo "mysql is runing"
else
echo "mysql is not runing"
fi

for 条件循环语句

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行处理,当要处理大量有规则的数据时,for 循环就有非常大的作用了。

    for 变量名 in 取值列表
do
待执行命令
done

我们可以通过一个例子来了解一下:

    #!/bin/bash
echo "read txt file test.txt"
for txt in `cat test.txt`
do
echo "file info $txt"
done

这个例子说明,可以通过for循环,从文件中读取数据,那么这样的话,我们的操作就非常的多了,比如,可以通过读取文件中的内容,创建用户,也可以修改系统的定时任务,还可以读取系统的参数文件,然后做出相应的判断,最后实现我们的功能。

上面的一个例子,是一个非常简单的功能,在实际应用中,我们还可能和 if 或者别的命令一起使用

while 条件循环语句

while 条件循环语句其实和 for 语句一样,都是循环语句,但是这两个循环语句的循环条件有点不一样, for 语句,是跟据读入的数组长度进行执行的,但是while 循环语句的执行条件是跟据条件是否为true 来执行的,所以两者的结构上有点不一样,但是实现的功能其实还是一样的。

结构:

    while 条件语句
do
命令语句
done

case 条件判断语句

case 语句是在多个范围之内进行匹配数据,若匹配成功则执行相关命令并结束整个条件测试,而如果数据不在所列出的范围内,则会去执行 * 号内的默认命令。

    case 变量值 in
模式1)
命令1
;;
模式2)
命令2
;;
*)
默认命令
esac

下面我们就通过一个简单的命令进行测试:

    #!/bin/bash
read -p "请输入一个字符,并按Enter确认:" KEY
case "$KEY" in
[a-z][A-Z])
echo "你输入的是字母:$KEY"
;;
[0-9])
echo "你输入的是数字:$KEY"
;;
*)
echo "你输入的是空格,或者特殊字符:$KEY"
esac

使用case可以帮助我们在有许多判断的时候进行简单一点的脚本编写,并且结构也更加的合理


细节决定成败!

个人愚见,如有不对,恳请扶正!

Linux | Shell流程控制语句的更多相关文章

  1. Linux Shell 流程控制语句

    * 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ...

  2. linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载

    http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html nux shell有一套自己的流程控制语句,其中包括条件语句(if),循环 ...

  3. linux shell 流程控制

    导读 和Java.PHP等语言不一样,linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介绍下,各个语句使 ...

  4. shell流程控制语句

    linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while,until),选择语句(case/select).下面我将通过例子介绍下,各个语句使用方法. 1 ...

  5. [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例

    原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ...

  6. 5.Shell 流程控制语句

    1.流程控制语句 通过if.for.while.case这4种流程控制语句来学习编写难度更大.功能更强的Shell脚本 4.3.1 if条件测试语句: if条件测试语句可以让脚本根据实际情况自动执行相 ...

  7. shell 流程控制语句

    case语句 case $变量名 in "值1")   如果变量的值等于值1,则执行程序1 ;;  "值2")   如果变量的值等于值2,则执行程序2 ;;   ...

  8. Shell流程控制语句for

    for语法格式: for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done for语句流程控制图: 实例: [root@youxi1 ~]# v ...

  9. Linux Shell——流程控制

    1. 创建交互式脚本 使用 echo命令的选项 关于各种命令的使用,可以使用man 命令来查看命令的详细用法介绍.例如,我想看下 echo 的用法和各种选项.可以执行 man echo.执行结果如下: ...

随机推荐

  1. PHP实现简单的socket与异步应用

    1.socket应用 (1)简单概念 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建立网络通信连接至少要一对端口号(socket).socket本质是编 ...

  2. Redis 内存大小限制+键值淘汰策略配置

    限制最大内存 windows 的 maxmemory-policy 策略可能会少一些 # 指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试 ...

  3. 5G通讯与芯片

    5G通讯与芯片 美国商务部可能接近达成一项新的规则,允许美国公司与华为重启谈判,在共同制定下一代通信技术5G标准方面进行合作. 华为美国首席安全官安迪·珀迪(Andy Purdy)向第一财经记者独家回 ...

  4. 智能驾驶L2发展策略

    智能驾驶L2发展策略 智能驾驶L2,以们通俗的定义是,以高级辅助驾驶的产品为主的各种巡航产品,包括定速巡航,自适应巡航ACC,预见性巡航,智能巡航等等. 车辆驾驶是集注意力高度集中,手把控方向盘和换挡 ...

  5. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  6. 关于switch语句的使用方法---正在苦学java代码的新手之菜鸟日记

    输入月份与年份,判断所输入的月份有多少天. switch支持和不支持的类型 支持的类型 int 类型 short 类型 byte 类型 char 类型 enum (枚举)类型 (java5.0 之后支 ...

  7. java后端知识点梳理——MySQL

    MySQL的索引 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息,就像一本书的目录一样,可以加快查询速度.InnoDB 存储引擎的索引模型底层实现数据结构为 ...

  8. python 日期与字符串之间的转换

    1.str转换为datetime >>> from datetime import datetime >>> cday = datetime.strptime('2 ...

  9. 这应该是把Java内存区域讲的最清楚的一篇文章

    基本问题: 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题: ...

  10. 身为一枚优秀的程序员必备的基于Redis的分布式锁和Redlock算法

    1 前言 今天开始来和大家一起学习一下Redis实际应用篇,会写几个Redis的常见应用. 在我看来Redis最为典型的应用就是作为分布式缓存系统,其他的一些应用本质上并不是杀手锏功能,是基于Redi ...