Shell循环(for,while,until,break与continue)

以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除。

一、for循环

for循环一般格式为:

for 变量 in 列表
docommand1command2...commandN
done

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。“in 列表”是可选的,如果不用它,for 循环使用命令行的位置参数。

例如,顺序输出当前列表中的数字:

for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done

例如,顺序输出字符串中的字符:(运行结果:This is a string)

for str in 'This is a string'
do
echo $str
done

例如,显示主目录下以 .bash 开头的文件:

#!/bin/bashfor FILE in $HOME/.bash*
do
echo $FILE
done

二、while循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据。

while循环其格式为:

while command
doStatement(s) to be executed if command is true
done

举例1:以下是一个基本的while循环,测试条件是:如果COUNTER小于5,那么返回 true。COUNTER从0开始,每次循环处理时,COUNTER加1。运行上述脚本,返回数字1到5,然后终止。

COUNTER=0
while [ $COUNTER -lt 5 ]
do
COUNTER='expr $COUNTER+1'
echo $COUNTER
done

运行脚本,输出:

1
2
3
4
5

举例2:while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按<Ctrl-D>结束循环。

echo 'type <CTRL-D> to terminate'
echo -n 'enter your most liked film: '
while read FILM
do
echo "Yeah! great film the $FILM"
done

运行脚本,输出类似下面:

type <CTRL-D> to terminate
enter your most liked film: Sound of Music
Yeah! great film the Sound of Music

三、until循环

until 循环与 while 循环在处理方式上刚好相反,until 循环执行一系列命令直至条件为 true 时停止。一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。

until 循环格式为:

until command
doStatement(s) to be executed until command is true
done

command 一般为条件表达式,如果返回值为 false,则继续执行循环体内的语句,否则跳出循环。

举例:使用 until 命令输出 0 ~ 9 的数字:

#!/bin/basha=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done

运行结果:

0
1
2
3
4
5
6
7
8
9

四、break和continue命令

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环。这时可以使用 break 和 continue 来跳出循环。

1、break命令

允许跳出所有循环(终止执行后面的所有循环)。

举例1:脚本进入死循环直至用户输入数字大于5。要跳出这个循环而返回到shell提示符下,就要使用break命令。

#!/bin/bash
while :
doecho -n "Input a number between 1 to 5: "read aNumcase $aNum in1|2|3|4|5) echo "Your number is $aNum!";;*) echo "You do not select a number between 1 to 5, game is over!"break;;esac
done

在嵌套循环中,break 命令后面还可以跟一个整数,表示跳出第几层循环。例如下面代码表示跳出第 n 层循环。

break n

举例2:如果 var1 等于 2,并且 var2 等于 0,就跳出循环:

#!/bin/bashfor var1 in 1 2 3
dofor var2 in 0 5doif [ $var1 -eq 2 -a $var2 -eq 0 ]thenbreak 2elseecho "$var1 $var2"fidone
done

如上,break 2 表示直接跳出外层循环。运行结果:

1 0
1 5

2、continue命令

不会跳出所有循环,仅仅跳出当前循环。

对上面的例子进行修改:

#!/bin/bash
while :
doecho -n "Input a number between 1 to 5: "read aNumcase $aNum in1|2|3|4|5) echo "Your number is $aNum!";;*) echo "You do not select a number between 1 to 5!"continueecho "Game is over!";;esac
done

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,下面语句永远不会被执行。

echo "Game is over!"

同样,continue 后面也可以跟一个数字,表示跳出第几层循环。再看一个 continue 的例子:

#!/bin/bashNUMS="1 2 3 4 5 6 7"for NUM in $NUMS
doQ=`expr $NUM % 2`if [ $Q -eq 0 ]thenecho "Number is an even number!!"continuefiecho "Found odd number"
done

运行结果:

Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

业界重磅新书《UNIX/Linux网络日志分析与流量监控》首发

《UNIX/Linux网络日志分析与流量监控》出版社官网&#xff1a; http://www.cmpbook.com/stackroom.php?id39384 每本图书附赠51CTO学院的价值100元学习卡一张京东&#xff1a;http://item.jd.com/11582561.html机械工业出版社在线购书平台&#xff1a;http://www.golden-book.…

Git工具使用基础

Git 是一个分布式的版本控制工具&#xff0c;本篇文章从介绍Git开始&#xff0c;重点在于介绍Git的基本命令和使用技巧&#xff0c;让你尝试使用Git的同时&#xff0c;体验到原来一个版 本控制工具可以对开发产生如此之多的影响&#xff0c;文章分为两部分&#xff0c;第一部分…

Shell case esac语句

以下内容源于C语言中文网的学习与整理&#xff0c;如有侵权&#xff0c;请告知删除。 case语句格式 case 值 in 模式1)command1command2command3;; 模式2&#xff09;command1command2command3;; *)command1command2command3;; esac 取值后面是关键字 in。取值可以为变量或常数…

Shell test命令

以下内容源于C语言中文网的学习与整理&#xff0c;如有侵权&#xff0c;请告知删除。 Shell中的 test 命令用于检查某个条件是否成立&#xff0c;它可以进行数值、字符和文件三个方面的测试。这其实相当于一个中括号&#xff1f; 一、数值测试 参数说明-eq等于则为真-ne不等于…

DDOS的攻击原理和防护指南

我们现在来分析DDOS的攻击原理。 首先&#xff0c;DDOS是英文Distributed Denial of Service的缩写&#xff0c;意思是分布式拒绝服务。拒绝服务又是什么意思呢&#xff1f;就是采取一些垃圾数据包来阻塞网站的网络通道&#xff0c;导致让网站不能正常访问。分布式服 务拒绝攻击…

Python基础笔记,后续更新

1,避免‘\n’等特殊字符的两种方式&#xff1a;1&#xff0c;利用转义字符‘\’2&#xff0c;利用原始字符‘r’ print rc:\now3,字符串中嵌入双引号等特殊符号1&#xff0c;利用转义字符‘\’2&#xff0c;使用单引号括起这个字符串 print (i l"o"ve fis.com)2…

.NET:如何让线程支持超时?

背景 本文是为了回复博客园一个兄弟的问题&#xff0c;主要回答两个问题&#xff1a; 如何让线程支持超时&#xff1f;如何让线程在执行结束后销毁&#xff1f;MS 现在不推荐使用低级别的 Thread 编程&#xff0c;而推荐使用 Task&#xff0c;另外我多数情况都是做企业应用&…

第1章 Express MongoDB 搭建多人博客

学习环境 Node.js &#xff1a; 0.10.22 Express &#xff1a; 3.4.4 MongoDB &#xff1a; 2.4.8 快速开始 安装 Express express 是 Node.js 上最流行的 Web 开发框架&#xff0c;正如他的名字一样&#xff0c;使用它我们可以快速的开发一个 Web 应用。我们用 express 来搭…

用UltraISO制作的u盘ubuntu11.04,启动失败解决方案

错误提示&#xff1a;SYSLINUX 3.84 2009-12-18 EBIOS Copyright c 1994-2009 H.Peter Anvin et al 折腾的很久&#xff0c;尝试用Pauly的bootice&#xff0c;结果可以从u盘启动了。 先用UltraISO制作好u盘ubuntu11.04。 下载bootice&#xff0c;把u盘插上去&#xff0c;打开软…

ATT汇编与Intel汇编区别

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 Linux 汇编语言开发指南 Intel 格式&#xff0d;&#xff0d;AT&T 格式_51CTO博客_at&t和intel汇编语法 前言 X86汇编语言有两种语法风格&#xff0c;即Intel汇编风格和AT&T汇编风格。…

Windows Phone 8初学者开发—第7部分:本地化应用程序

Windows Phone 8初学者开发—第7部分&#xff1a;本地化应用程序 原文 Windows Phone 8初学者开发—第7部分&#xff1a;本地化应用程序 第7部分:本地化应用程序 原文地址&#xff1a; http://channel9.msdn.com/Series/Windows-Phone-8-Development-for-Absolute-Beginners/Pa…

linux shell 上传,下载ftp文件

#####从ftp服务器上的/home/data 到 本地的/home/databackup#####!/bin/bash ftp -n<<! open 192.168.1.171 user guest 123456 binary cd /home/data lcd /home/databackup promptmget *close bye ! 2. ftp自动登录上传文件。 ####本地的/home/databackup to ftp服务器…

ARM官方汇编指令

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;文档《ARM汇编指令集汇总》 &#xff08;2&#xff09;文档《ARM汇编手册》 &#xff08;3&#xff09;文档《ARM Software Development Toolkit User Guide》 内容总结…

C# 使用printDocument1.Print打印时不显示 正在打印对话框(里面还有一个讨厌的取消按钮)...

C#使用printDocument1.Print打印时不显示正在打印对话框有两种方法 第一种&#xff0c;使用PrintController PrintController printController new StandardPrintController(); printDocument1.PrintController printController; printDocument1.Print(); 第二种&am…

audio 标签简介

定义和用法 <audio> 标签定义声音&#xff0c;比如音乐或其他音频流。 实例 一段简单的 HTML 5 音频&#xff1a; <audio src"someaudio.wav"> 您的浏览器不支持 audio 标签。 </audio> 提示和注释 提示&#xff1a;可以在开始标签和结束标签之间放…

合法立即数与非法立即数

ARM指令都是32位&#xff0c;除了指令标记和操作标记&#xff0c;本身只能附带很少位数的立即数。因此立即数有合法和非法之分。 合法立即数&#xff1a;经过任意位数的移位后非零部分可以用8位表示的即为合法立即数。 ldr伪指令可以不用人为去判断合法立即数。

magento 瘦身数据库

2019独角兽企业重金招聘Python工程师标准>>> 2013/4/1更新 有两种方式&#xff0c;一种在后台设置自动清除log数据 System > Configuration > Advanced > System 打开 Log Cleaning 还有一种自然是直接清理数据库 truncate dataflow_batch_export; truncat…

GNU汇编程序中某些符号的含义

&#xff08;1&#xff09; 或者 # 或者 /**/ 用来做注释。可以在行首也可以在代码后面同一行直接跟&#xff0c;和C语言中//类似。 #用来做注释&#xff0c;一般放在行首&#xff0c;表示这一行都是注释而不是代码。 /**/也可以用来做注释。 &#xff08;2&#xff09;冒号&am…

推荐给大家一个下载软件的好网站—MSDN I Tell you

http://msdn.itellyou.cn/转载于:https://www.cnblogs.com/Charlie-Gou/p/3460180.html

大数据时代的移动即时通讯

随着大数据的到来&#xff0c;第三方开放API的服务商越来越多&#xff0c;数据的挖掘和展示也在不断的更新。首先值得广大手机用户骄傲的事情&#xff0c;在移动通讯方面有了长足的发展&#xff0c;比如说你正在工作的时候&#xff0c;接听电话和打开视频的速度都相同的话&…