国庆过后;感觉有点慵懒些了;接着上篇;我们继续来学习循环语句。

一. for循环

与其他编程语言类似,Shell支持for循环。

for循环一般格式为:
for 变量 in 列表
do
command1
command2
...
commandN
done

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量

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

for01.sh
$ cat for01.sh
#!/bin/sh
for i in 1 2 3 4 5
do
echo "this is $i"
done
$ ./for01.sh
this is 1
this is 2
this is 3
this is 4
this is 5

当然也可以向其他语言那样for ((i=1;i++<5));但是是要双括号;这个是与众不同。

#!/bin/sh
for ((i=1;i<=5;i++))
do
echo "this is $i"
done

【注意】in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。如下:

$ cat for01.sh
#!/bin/sh
for i
do
echo "this is $i"
done
$ ./for01.sh 1 2 3 4 5
this is 1
this is 2
this is 3
this is 4
this is 5

【note】对于列表;像上面一样;其实命令ls当前目录下的所有文件就是一个列表


二.while 循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件

#其格式为:
while command
do
   Statement(s) to be executed if command is true
done

命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。
以for循环的例子。

$ cat while01.sh
#!/bin/sh
i=0
while [ $i -lt 5 ]
do
let "i++"
echo "this is $i"
done
$ ./while01.sh
this is 1
this is 2
this is 3
this is 4
this is 5

其实while循环用的最多是用来读文件。

#!/bin/bash
count=1
cat test | while read line #cat 命令的输出作为read命令的输入,read读到的值放在line中
do
echo "Line $count:$line"
count=$[ $count + 1 ]
done
或者如下
#!/bin/sh
count=1
while read line
do 
  echo "Line $count:$line"
count=$[ $count + 1 ]
done < test

【注意】当然你用awk的话;那是相当简单;awk '{print "Line " NR " : " $0}' test
输出时要去除冒号域分隔符,可使用变量IFS。在改变它之前保存IFS的当前设置。然后在脚本执行完后恢复此设置。使用IFS可以将域分隔符改为冒号而不是空格或tab键

例如文件worker.txt
Louise Conrad:Accounts:ACC8987
Peter Jamas:Payroll:PR489
Fred Terms:Customer:CUS012
James Lenod:Accounts:ACC887
Frank Pavely:Payroll:PR489
while02.sh如下:
#!/bin/sh
#author: li0924
#SAVEIFS=$IFS
IFS=:
while read name dept id
 do
  echo -e "$name\t$dept\t$id"
 done < worker.txt
#IFS=$SAVEIFS

三.until循环

until 循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反

until 循环格式为:
until command
do
Statement(s) to be executed until command is true
done

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

$ cat until01.sh
#!/bin/sh
i=0
until [ $i -gt 5 ]
do
let "i++"
echo "this is $i"
done

一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。详细介绍until就不必要了


四. break和continue命令

1. break命令
break命令允许跳出所有循环(终止执行后面的所有循环)
2.continue命令
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

break01.sh
#!/bin/sh
for ((i=1;i<=5;i++))
do
if [ $i == 2 ];then
break
else
echo "this is $i"
fi
done

至于continue命令演示;你就把break替换下;执行看下效果就行了。不解释。

shell基础(八)-循环语句的更多相关文章

  1. VBS基础篇 - 循环语句(3) - For...Next

    VBS基础篇 - 循环语句(3) - For...Next   指定循环次数,使用计数器重复运行语句,语法结构如下: 1 2 3 4 5 For counter = start To end [Ste ...

  2. VBS基础篇 - 循环语句(4) - For Each...Next

    VBS基础篇 - 循环语句(4) - For Each...Next   For Each...Next 循环与 For...Next 循环类似.For Each...Next 不是将语句运行指定的次 ...

  3. 04 shell编程之循环语句

    Shell编程之循环语句 学习目标: 掌握for循环语句编程 掌握while循环语句编程 目录结构: For循环语句 l  读取不同的变量值,以逐个执行同一组命令 l  For语句结构 for 变量名 ...

  4. shell编程之循环语句for / while / until

    shell编程之循环语句与函数 一.条件测试 二.循环语句 ① for循环语句结构(遍历) 示例1 示例2 ② while循环语句结构(迭代) 示例1 示例2 ③ until 循环语句结构 示例1 一 ...

  5. shell脚本之循环语句与函数

    shell脚本之循环语句与函数 echo的用法: echo -n #表示不换行输出 echo -e #输出转义字符,将转义后的内容输出到屏幕上 转义字符: \n :换行,被输出的字符从"\n ...

  6. Shell编程之循环语句与echo的用法

    Shell编程之循环语句与echo的用法 目录 Shell编程之循环语句与echo的用法 一.echo用法 1. echo常用选项 2. 常用的转义字符 3. 特殊符号%.#的用法 二.循环语句 1. ...

  7. go基础语法-循环语句

    1.基础定义 for语句的条件不需要括号(同if语句) ,golang里的循环只有for,没有while sum := 0 for i=0;i<100;i++ { sum += i } 2.条件 ...

  8. Shell脚本中循环语句for,while,until用法

    循环语句: Bash Shell中主要提供了三种循环方式:for.while和until. 一.for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区 ...

  9. Shell中的循环语句实例

    1.for循环语句实例1.1 最基本的for循环 #!/bin/bash for x in one two three four do     echo number $x done 注:" ...

  10. shell基础之if语句

    Shell流程控制 流程控制是改变程序运行顺序的指令.linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case).下面我将通过例子介 ...

随机推荐

  1. 向linux服务器上传下载文件方式收集

    向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...

  2. iOS UITableView中关于cell里的按钮被点击时如何确定是哪一个section

    在section=10:row=1:的UITableView中,每一个cell都带有一个按钮,例如如下的图片一样每一个cell中都有一个“进入店铺的按钮”,但是如果我点击相应的cell要进入对应的店铺 ...

  3. 网络虚拟化(SDN,NFV..)和企业骨干网的演化

    本来昨天就规划了今天的这篇文章,无奈昨天中午自己喝了将近一瓶的52度二锅头...晚上想着今天怎么着也完了,要颓废难受一天了...没想到早上居然一点都不难受了.于是就写下了本文.正文之前,还是做个广告, ...

  4. 【Unity笔记】鼠标射线由指定层接收

    LayerMask mask = << LayerMask.NameToLayer("UI"); Ray ray = Camera.main.ScreenPointTo ...

  5. Ajax-ajax实例1-动态加载的 FAQ

    动态加载 FAQ 的过程主要是利用 XMLHttpRequest(以下简称 XHR)对象与服务端通信,根据用户单击的感兴趣问题动态将内容加载到页面中.在具体实现时,有两点要注意的内容. 1 .对每个问 ...

  6. MySql C++调用库Connector/c++编译 和 接口封装【二】Connector/c++编译

    二.Connector/c++库的编译:     1.把MySql数据库安装完成后,把bin目录加入环境变量.          2.下载boost库,官网就有下载: http://www.boost ...

  7. jQuery.Form插件介绍

    一.前言  jQuery From插件是一个优秀的Ajax表单插件,使用它可以让你非常容易地.无侵入地升级HTML表单以支持Ajax.jQuery From有两个主要方法:ajaxForm和ajaxS ...

  8. 每个Web开发者都应该知道的关于URL编码的知识

    本文首先阐述了人们关于统一资源定位符(URL)编码的普遍的误读,其后通过阐明HTTP场景下的URL encoding 来引出我们经常遇到的问题及其解决方案.本文并不特定于某类编程语言,我们在Java环 ...

  9. 初涉RxAndroid结合Glide实现多图片载入操作

    转载请注明出处:王亟亟的大牛之路 本来周末就想发了然后各种拖拉就没有然后了,那么就今天早上写吧,废话不多開始正题 什么是RxJava或者RxAndroid我就不多废话了,理论知识一大堆人给我们做好了. ...

  10. UART通信协议

    第一部分: UART使用的是 异步,串行通信.    串行通信是指利用一条传输线将资料一位位地顺序传送.特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场 ...