Linux | Shell流程控制语句
流程控制语句
简单的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流程控制语句的更多相关文章
- Linux Shell 流程控制语句
		* 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ... 
- linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载
		http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html nux shell有一套自己的流程控制语句,其中包括条件语句(if),循环 ... 
- linux shell 流程控制
		导读 和Java.PHP等语言不一样,linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介绍下,各个语句使 ... 
- shell流程控制语句
		linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while,until),选择语句(case/select).下面我将通过例子介绍下,各个语句使用方法. 1 ... 
- [转]linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例
		原文链接:http://www.cnblogs.com/chengmo/archive/2010/10/14/1851434.html linux shell有一套自己的流程控制语句,其中包括条件语句 ... 
- 5.Shell 流程控制语句
		1.流程控制语句 通过if.for.while.case这4种流程控制语句来学习编写难度更大.功能更强的Shell脚本 4.3.1 if条件测试语句: if条件测试语句可以让脚本根据实际情况自动执行相 ... 
- shell 流程控制语句
		case语句 case $变量名 in "值1") 如果变量的值等于值1,则执行程序1 ;; "值2") 如果变量的值等于值2,则执行程序2 ;; ... 
- Shell流程控制语句for
		for语法格式: for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done for语句流程控制图: 实例: [root@youxi1 ~]# v ... 
- Linux Shell——流程控制
		1. 创建交互式脚本 使用 echo命令的选项 关于各种命令的使用,可以使用man 命令来查看命令的详细用法介绍.例如,我想看下 echo 的用法和各种选项.可以执行 man echo.执行结果如下: ... 
随机推荐
- 加载动画效果 HTML+ CSS
			加载动画效果 写在前面 在无限的时间的河流里,人生仅仅是微小又微小的波浪.--郭小川 实现效果 实现原理 通过2个伪元素来设置3条颜色边框 通过定位将3个圆弧边框层叠再一起,再通过旋转实现一个圆的效果 ... 
- java并发编程工具类JUC第一篇:BlockingQueue阻塞队列
			Java BlockingQueue接口java.util.concurrent.BlockingQueue表示一个可以存取元素,并且线程安全的队列.换句话说,当多线程同时从 JavaBlocking ... 
- HTTP状态 500 - 内部服务器错误之Could not open ServletContext resource [/db.properties]或者 [/mybatis.xml]
			报错原因是因为找不到db.properties或者mybatis.xml,但是我明明写了有.找了一下,才发现spring-dao.xml里面这两个配置文件地址有问题 Maven项目,applicati ... 
- OneFlow 概念清单
			OneFlow 概念清单 本文将对 OneFlow 中涉及到的,常用的一些概念/名词做一个概括性的解释.主要内容针对算法工程师和框架开发者分为以下两部分: 算法开发 框架开发 在算法开发部分,将解释深 ... 
- Hash源码注释解析
			部分代码注释解析: 1 import java.io.IOException; 2 import java.io.InvalidObjectException; 3 import java.io.Se ... 
- UF_MTX   矩阵操作
			Open C UF_MTX2_copyUF_MTX2_determinantUF_MTX2_identityUF_MTX2_initializeUF_MTX2_multiplyUF_MTX2_mu ... 
- Windows的静态库与动态库
			Windows的静态库与动态库 1.静态库 1.1 静态库特点 运行不存在 静态库源码被链接到调用程序中 目标程序的归档 1.2 C语言静态库 C静态库的创建 创建一个静态库项目. 添加库程序,源文件 ... 
- Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用
			Linkerd 2.10 系列 快速上手 Linkerd v2.10 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traef ... 
- tree (一本通练习||清华集训互测)
			tree 内存限制:512 MiB 时间限制:3000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有nee ... 
- windows+R键的应用
			windows+R:然后输入以下几个命令 1.cmd :用于Windows命令行操作,比如:ping某个网络,看看是不是通的,或者directory等等Windows命令行操作 2.远程桌面连接:ms ... 
