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 ...
随机推荐
- Windows安装部署Tensorflow过程中的问题处理
1 在配置Tensorflow过程中有一行命令是 python object_detection/builders/model_builder_test.py 过程中出现了 NameError: na ...
- python 实现排序算法(二)-合并排序(递归法)
#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Nov 21 22:28:09 201 ...
- Centos下安装Docker集群管理工具Shipyard
一. Docker Shipyard是什么 ? shipyard是一个开源的docker管理平台,其特性主要包括: 支持镜像管理.容器管理. 支持控制台命令 容器资源消耗监控 支持集群swarm,可以 ...
- KVM总结-KVM性能优化之CPU优化
前言 任何平台根据场景的不同,都有相应的优化.不一样的硬件环境.网络环境,同样的一个平台,它跑出的效果也肯定不一样.就好比一辆法拉利,在高速公路里跑跟乡村街道跑,速度和激情肯定不同… 所以,我们做运维 ...
- Win7 发生验证错误 要求的函数不受支持
今天登陆服务器突然登不上了,给我报了一个错误“发生验证错误 要求的函数不受支持”,用同事的win7电脑和win10电脑都可以,就是我的不行,气死我了,然后我百度百度啊,用了好几种“说用了就OK”的办法 ...
- 用socket发送信息在浏览器上显示出来
服务端代码: import socket def main(): sock=socket.socket() sock.bind(('localhost',8089)) sock.listen(5) w ...
- 初级安全入门——SQL注入的原理与利用
工具简介 SQLMAP: 一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器.它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文 ...
- json.loads()的字符串中为单引号引发的错误
如下错误属于弱智错误,但是错的原因让我无语,所以记录一下 str2="{'card':6217001650004184441}"print(json.loads(str2)) Tr ...
- 04-spark streaming
1.基本概念(了解) ①流(Streaming): 是一种数据传送技术,它把客户机收到的数据变成一个稳定连续的流,源源不断地送出,使用户听到的声音或看到的图象十分平稳, 而且用户在整个文件送完之前就可 ...
- java开发_""和null的区别
转自:http://www.cnblogs.com/hongten/archive/2012/11/08/java_null.html#undefined 在代码中: 1 //name可以为" ...