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=
num2=
if [ "${num1}" -lt "${num2}" ];then
echo "${num1} is less than ${num2}"
fi
(2)简单的if else语句,使用格式如下:
if [ 条件判断式 ];then
程序段
else
程序段
fi
使用if/else语句修改比较数值大小的实例,如下
#!/bin/bash num1=
num2=
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=
num2=
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 )
do
echo $i
done
(2)for循环的第二种格式如下
for((初始值;限制值;执行步长))
do
程序段
done
该类型for循环适合数值方式的运算中。简单实例如下
#!/bin/bash for((i=;i<=;i++))
do
echo $i
done
while循环
while循环用于不断执行一系列命令,也用于从输入文件中读取数据,使用格式如下:
while 命令
do
程序段
done
(1)打印1~100的整数
#!/bin/bash i=
while [ $i -le ]
do
echo $i
i=$(($i+))
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=
until [ $i -gt ]
do
echo $i
i=$(($i+))
done
break和continue使用
有时需要基于某些准则退出循环或者跳过循环步。其中break命令允许跳出循环、continue用于跳出当次循环。
(1)打印小于50的整数。
#!/bin/bash i=
while [ $i -le ]
do
echo $i
i=$(($i+))
if [ $i -gt ];then
break
fi
done
(2)打印1-100以内的偶数。
#!/bin/bash i=
while [ $i -le ]
do
if [ $(expr $i % ) -eq ];then
echo $i
fi
i=$(($i+))
done
shell流程控制与循环结构的更多相关文章
- 053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结
053 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 15 流程控制知识总结 本文知识点: 流程控制知识总结 流程控制知识总结 选择结构语句 循环结构语句 ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- 050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句
050 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 12 continue语句 本文知识点:continue语句 continue语句 continue ...
- 049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句
049 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 11 break语句 本文知识点:break语句 break语句 break语句前情回顾 1.swi ...
- 048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例——阶乘的累加和
048 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 10 案例--阶乘的累加和 本文知识点:通过案例练习嵌套循环应用 案例练习--阶乘的累加和 案例题目 ...
- 047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用
047 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 09 嵌套while循环应用 本文知识点:嵌套while循环应用 什么是循环嵌套? 什么是循环嵌套? ...
- 046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项
046 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 08 for循环的注意事项 本文知识点:for循环的注意事项 for循环的注意事项 for循环有3个 ...
- 045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围
045 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 07 for循环应用及局部变量作用范围 本文知识点:for循环应用及局部变量作用范围 for循环 w ...
随机推荐
- RAC集群安装校验输出信息
RAC集群安装校验输出信息 作者:Eric 微信:loveoracle11g [grid@rac-node1 grid]$ [grid@rac-node1 grid]$ ./runcluvfy.sh ...
- HTTP协议的简单解析
超文本传输协议(HTTP,HyperText Transfer Protocol)是用于从服务器传输超文本到本地浏览器的传输协议,是应用最为广泛的网络协议.B/S网络架构的核心是HTTP,掌握HTTP ...
- CRM 2016 一个IFrame_A 刷新另一个 IFrame_B
思路是 : 1 创建一个字段“new_xxx”. 2 注册字段 OnChange 事件. 3 OnChange 事件 刷新 IFrame_B子页面. CRM父页面JS: /// <summary ...
- iOS 懒加载 字典转模型
>>>懒加载 一.介绍 懒加载又称延时加载,即在系统调用时加载,如果系统不调用则不会加载,所谓懒加载其实就是重写其get方法. 在使用懒加载时要先判断该方法是否存在,如果不存在再进行 ...
- ZooKeeper系列(6):ZooKeeper机制架构
一.ZooKeeper权限管理机制 1.1 权限管理ACL(Access Control List) ZooKeeper 的权限管理亦即ACL 控制功能,使用ACL来对Znode进行访问控制.ACL的 ...
- c#语言集合分析
集合的赋值: double fenshu = 0; al.Add(fenshu=double.Parse (Console .ReadLine ())); //如果是存数字,将来要比较大小,需要再添加 ...
- BZOJ2054 疯狂的馒头 并查集
题意:懒得写了有空再补上 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2054 离线从后往前做,并查集维护下一个没染色的就可以啦- #incl ...
- SVG 学习<六> SVG的transform
目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...
- geiUItabBarItem设置图片颜色和title颜色
设置图片颜色 tabBarVCtrl.tabBar.selectedImageTintColor = [UIColor greenColor];//设置tabBarItem选中时的字图颜色,iOS 8 ...
- Linux:DNS服务器搭建及配置
1.yum install -y bind bind-chroot bind-utils 2.编辑DNS主配置文件 vim /etc/named.conf 修改如下标红色处即可: options ...