[ Shell入门教程 ] Shell流程控制与循环结构
本文主要介绍Shell脚本中的流程控制语句,包括if/else、case,循环语句包括for循环、while循环、until循环等内容。并通过简单实例介绍它们的使用方法。
if语句
(1)最简单的if语句。使用格式有2种方式,分别如下
使用格式1:
if [ 条件判断式 ];then
程序段
fi
使用格式2:
if [ 条件判断式 ]
then
程序段
fi
特别说明:
(1)建议使用格式1。格式1和格式2的区别是then重新换行以及是否带命令分隔符";"。
(2)if语句使用fi结尾。否则报错。
下面看一个简单示例。
#!/bin/bash
num1=10
num2=15
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
fi
(2)简单的if else语句,使用格式如下:
if [ 条件判断式 ];then
程序段
else
程序段
fi
使用if/else语句修改比较数值大小的实例,如下
#!/bin/bash
num1=20
num2=15
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
else
echo "${num1} is greater than ${num2}"
fi
(3)多分支的if else语句,使用格式如下:
if [ 条件判断式1 ];then
程序段
elif [ 条件判断式2 ];then
程序段
else
程序段
fi
继续修改比较数值大小的实例,代码如下
#!/bin/bash
num1=10
num2=10
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
elif [ "${num1}" -gt "${num2}" ];then
echo "${num1} is greater than ${num2}"
else
echo "${num1} is equal to ${num2}"
fi
case语句
case语句为多选择语句,可以用case语句匹配一个值或者一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
case 值 in
模式1)
程序段1
;;
模式2)
程序段2
;;
……
*)
程序段n
;;
esac
模式可以是变量或常数,可以包含元字符。其中*表示任意字符、?表示任意单一字符、[..]表示范围中的任意字符。下面通过实例来了解case语句用法。
#!/bin/bash read -p "Please input yes or no:" YN case "${YN}" in Yes) echo "Input Yes" ;; No) echo "Input No" ;; yes|YES) echo "please input yes" ;; NO|no) echo "please input no" ;; *) echo "input error" ;; esac
for循环
(1)最简单的for循环语句,使用格式如下:
for 变量名 in 值1 值2 值3 ... 值n
do
程序段
done
for循环工作时会对in后面的变量值逐一遍历取值并进入程序段操作。使用基本实例如下:
#!/bin/bash
for i in $(seq 1 5)
do
echo $i
done
(2)for循环的第二种格式如下
for((初始值;限制值;执行步长))
do
程序段
done
该类型for循环适合数值方式的运算中。简单实例如下
#!/bin/bash
for((i=1;i<=10;i++))
do
echo $i
done
while循环
while循环用于不断执行一系列命令,也用于从输入文件中读取数据,使用格式如下:
while 命令
do
程序段
done
(1)打印1~100的整数
#!/bin/bash
i=1
while [ $i -le 100 ]
do
echo $i
i=$(($i+1))
done
(2)从文件中读取数据,打印每一行内容
#!/bin/bash
while read line
do
echo $line
done < /etc/passwd
(3)从文件中读入,并赋值给对应的变量。假设student.txt文件中每一行包含3列分别为Name、Age、Address,字段分隔符为空格。
#!/bin/bash
while read NAME AGE ADDRESS
do
echo "name=${NAME}"
echo "age=${AGE}"
echo "address=${ADDRESS}"
done < student.txt
(4)如果实例(3)中的student.txt文件字段分隔符为冒号":",可以使用变量IFS处理,处理方法如下:
#!/bin/bash
OLD_IFS=$IFS
IFS=":"
while read NAME AGE ADDRESS
do
echo "name=${NAME}"
echo "age=${AGE}"
echo "address=${ADDRESS}"
done < student.txt
IFS=${OLD_IFS}
until循环
until循环执行一系列命令直至条件为真时停止。until循环会执行一次程序体再判断测试条件。测试条件为真,则执行退出。某些场景下,until循环会比while循环更好用。使用格式为如下:
until 命令
do
程序段
done
(1)打印1~100的整数
#!/bin/bash
i=1
until [ $i -gt 100 ]
do
echo $i
i=$(($i+1))
done
break和continue使用
有时需要基于某些准则退出循环或者跳过循环步。其中break命令允许跳出循环、continue用于跳出当次循环。
(1)打印小于50的整数。
#!/bin/bash
i=1
while [ $i -le 100 ]
do
echo $i
i=$(($i+1))
if [ $i -gt 50 ];then
break
fi
done
(2)打印1-100以内的偶数。
#!/bin/bash
i=1
while [ $i -le 100 ]
do
if [ $(expr $i % 2) -eq 0 ];then
echo $i
fi
i=$(($i+1))
done
相关文章
- Java第2章 流程控制语句
- 机器学习项目的完整流程:①数学建模、②获取数据、③数据预处理、④特征工程、⑤模型的选择、⑥模型训练、⑦模型调优、⑧模型评价、⑨模型融合、⑩上线
- Java 流程控制语句——循环结构
- Java 流程控制语句——分支结构
- Java前辈:学习J2EE流程中的经验和教训
- JavaScript-->流程控制语句*笔记
- 前端基础(六)_流程控制语句(if、if-else、if-else嵌套、switch)
- JavaScript流程控制语句(全)—if语句、switch语句、while循环、for循环等,关注收藏,持续更新
- 使用码云代码管理平台进行多人协作开发的流程
- php程序的三大流程控制
- awk系列:在awk中如何使用流程控制语句
- Go语言之流程控制
- 深入理解 MyBatis 启动流程(一)
- 小程序开发流程
- Python运算符和python流程控制之if结构(二)
- Vsphere笔记06 Vcenter 部署流程 1
- JavaScript基础知识③(流程控制 -- 顺序、分支、循环)
- PHP流程控制中不经常使用的替代语法
- 对于流程优化的处理器架构
- OAuth2.0 原理流程及其单点登录和权限控制
- 【JAVA百炼成仙】金丹篇——JAVA流程控制
- Python3简明教程(五)—— 流程控制之循环
- 【创作赢红包】Python第3章 流程控制
- 关于linux下的mysql配置流程以及项目发布的流程
- 【安全硬件】Chap.6 IC和半导体产业的全球化;芯片生产猜疑链与SoC设计流程;可能会存在的安全威胁: 硬件木马、IP盗版、逆向工程、侧信道攻击、伪造
- mysql存储过程和常用流程控制
- Flutter 核心渲染流程分析
- 08前端学习之JavaScript 基础语法(二):运算符、流程控制、循环