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.执行结果如下: ...
随机推荐
- ES6笔记2
ES6笔记2 Promise Promise 是 ES6 引入的异步编程的新解决方案,语法上是一个构造函数 一共有3种状态,pending(进行中).fulfilled(已成功)和rejected(已 ...
- 第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松
第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松 TCP 包头格式 我们先来看 TCP 头的格式.从这个图上可以看出,它比 UDP 复杂得多. 首先,源端口号和目标端口号是不可少的,这一点 ...
- TODO不实现会报错
kotlin.NotImplementedError: An operation is not implemented: Not yet implemented 会发生--当你 override fu ...
- LR: GLU-Net: Global-Local Universal Network for Dense Flow and Correspondences
Abstract 在图像中简历稠密匹配是很重要的任务, 包括 几何匹配,光流,语义匹配. 但是这些应用有很大的挑战: 大的平移, 像素精度, 外观变化: 当前是用特定的网络架构来解决一个单一问题. 我 ...
- Paddle概述
Paddle概述 本文结合深度学习理论与实践,使用百度飞桨平台实现自然语言处理.计算机视觉及个性化推荐等领域的经典应用. 实践部分使用飞桨深度学习开源框架,适配最新的2.0版本,默认使用动态图编程范式 ...
- MLIR多级中间表示概述
MLIR多级中间表示概述 MLIR项目是构建可重用和可扩展的编译器基础设施的一种新方法.MLIR旨在解决软件碎片化问题,改进异构硬件的编译,显著降低构建特定领域编译器的成本,并帮助将现有编译器连接在一 ...
- git stash的常用操作
列出stash的: git stash list移除stash: git stash drop stash@{0}查看stash: git stash sho ...
- 【转】【NX二次开发】UFUN进度中断,单击停止可中断此操作
队长的博客: https://www.cnblogs.com/nxopen2018/p/13174207.html 显示此对话框,点击可中断操作: 用到的ufun函数: UF_ABORT_ask_fl ...
- Binding(二):控件关联和代码提升
上节我们讲到,使用Binding,我们可以关联后台代码中的属性,在某些情况下,我们可能需要将两个控件关联起来,借助Binding,我们也可以轻松的实现. 关联控件 设想这样一个场景,界面中有个Chec ...
- [INS-32033] Central Inventory location is not writable
这个是因为之前安装过一次图形界面,已经创建过Inventory,所以会报错. 解决:删除oraInventory这个目录.