1.for命令

for命令的基本格式如下:

for var in list

do

commands

done

在每次迭代中,变量var会包含列表中的当前值。第一次迭代会使用列表中的第一个值,第

二次迭代使用第二个值,以此类推,直到列表中的所有值都过一遍。

1.1 读取列表中的值

每次for命令遍历值列表,它都会将列表中的下个值赋给$test变量。

示例2:

$test变量保持了其值,也允许我们修改它的值,并在for命令循环之外跟其他变量一样使用。

1.2 读取列表中的复杂值

示例3:有单引号时,还按照上面的操作时,输出结果就很乱。

有两种办法可解决这个问题:

(1)使用转义字符(反斜线)来将单引号转义;

(2)使用双引号来定义用到单引号的值。

使用上述解决方法解决之后的示例如下:

加上转义字符或双引号之后,结果显示正常了。

另一个问题是有多个词的值,for循环假定每个值都是用空格分割的,如果有包含空格的数据值,输出结果就异常了。

示例:

for命令用空格来划分列表中的每个值,如果在单独的数据值中有空格,就必须用双引号将这些值圈起来。

1.3 从变量读取列表

可以通过for命令完成便利整个列表的任务。

1.4 从命令读取值

for命令仍然以每次一行的方式遍历了cat命令的输出,假定每个内容都是在单独的一行上。但这并没有解决数据中有空格的问题。

1.5 更改字段分隔符

bash shell会将下列字符当作字段分隔符:

(1)空格

(2)制表符

(3)换行符

看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始。

但是在处理可能含有空格的数据时还是比较麻烦。

现在,shell脚本旧能够使用列表中含有空格的值了。

1.6 用通配符读取目录

文件扩展匹配是生成匹配指定通配符的文件名或路径名的过程。如果不知道所有的文件名,可以使用文件扩展匹配。

示例:

for命令会遍历/home/lihuifang/*输出的结果。

上述示例中注意if [ -d “$file” ] 中的file需要使用双引号括起来,不然执行时会有问题。

也可以在for命令中列出多个目录通配符,将目录查找和列表合并进同一个for语句。

示例如下:

2.while 命令

2.1 while 的基本格式

while命令的格式是:

while test command

do

other commands

done

while命令的关键在于所指定的test command的退出状态码必须随着循环中运行的命令而改变。如果退出状态码不发生变化, while循环就将一直不停地进行下去。

最常见的test command的用法是用方括号来检查循环命令中用到的shell变量的值。

2.2 使用多个测试命令

while命令允许你在while语句行定义多个测试命令。只有最后一个测试命令的退出状态码

会被用来决定什么时候结束循环。

示例:

2.3 until 命令

until命令和while命令工作的方式完全相反。

until命令的格式如下。

until test commands

do

other commands

done

示例如下:

2.4 嵌套循环

循环语句可以在循环内使用任意类型的命令,包括其他循环命令,这种循环叫作嵌套循环。

示例:在for循环中嵌套for循环。

这个被嵌套的循环(也称为内部循环,inner loop)会在外部循环的每次迭代中遍历一次它所

有的值。

在混用循环命令时也一样,比如在while循环内部放置一个for循环。

2.5 循环处理文件数据

遍历存储在文件中的数据,可以使用两种技术:

(1)使用嵌套循环

(2)修改IFS环境变量

2.6 控制循环

2.6.1 break 命令

break命令是退出循环的一个简单方法。可以用break命令来退出任意类型的循环,包括

while和until循环。

(1) 跳出单个循环

在shell执行break命令时,它会尝试跳出当前正在执行的循环。

for循环通常都会遍历列表中指定的所有值。但当满足if-then的条件时,shell会执行break

命令,停止for循环。

(2)跳出内部循环

在处理多个循环时,break命令会自动终止你所在的最内层的循环。

(3)跳出外部循环

有时你在内部循环,但需要停止外部循环。break命令接受单个命令行参数值:

break n

其中n指定了要跳出的循环层级。默认情况下,n为1,表明跳出的是当前的循环。如果你将

n设为2,break命令就会停止下一级的外部循环。

这里不再举例。

2.6.2 continue 命令

continue命令可以提前中止某次循环中的命令,但并不会完全终止整个循环。

和break命令一样,continue命令也允许通过命令行参数指定要继续执行哪一级循环:

continue n

其中n定义了要继续的循环层级。

《Linux命令行与shell脚本编程大全》第十三章 学习笔记相关推荐

  1. Linux_《Linux命令行与shell脚本编程大全》第二章学习总结

    时间:2017年04月05日 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>(第三版 ...

  2. Linux命令行与shell脚本编程大全第三版 学习笔记

    Linux自己的文件资料: /usr/share/doc (在你的Linux系统中) https://www.osyunwei.com/archives/290.html 0. 注意Linux中一切皆 ...

  3. Linux_《Linux命令行与shell脚本编程大全》第十章学习总结

    时间:2017年08月24日星期四 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...

  4. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter17-ChapterB )

    十七.创建函数 bash shell 提供了用户自定义函数功能,可以将 shell 脚本代码放入函数中封装起来. 函数是一个脚本代码块,你可以为其命名并在脚本中的任何位置重用它.每当需要在脚本中使用该 ...

  5. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter16-脚本控制

    十六.脚本控制 Linux 利用信号与系统中的进程进行通信. 重温 Linux 信号 Linux 系统和应用程序可以产生超过 30 个信号.在 shell 脚本编程时会遇到的最常见的 Linux 系统 ...

  6. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter1-Chapter16 )

    一.初识 Linux shell Linux 系统可划分为以下 4 部分. Linux 内核 GNU 工具 图形化桌面环境 应用软件 内核主要负责以下 4 种功能. 系统内存管理 内核通过硬盘上称为交 ...

  7. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter6-Linux 环境变量

    六.Linux 环境变量 bash shell 使用环境变量来存储 shell 会话和工作环境的相关信息(这也是被称作环境变量的原因).环境变量允许在内存中存储数据, 以便 shell 中运行的程序或 ...

  8. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter9-安装软件

    九.安装软件 软件包管理系统使用数据库来记录下列内容: Linux 系统中已安装的软件包. 每个软件包安装了哪些文件. 每个已安装的软件包的版本. 软件包存储在称为仓库(repository)的服务器 ...

  9. Linux命令行与shell脚本编程大全:第2版

    <Linux命令行与shell脚本编程大全:第2版> 基本信息 作者: (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍] 译者: 武海峰 丛书名: 图 ...

  10. 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---34

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...

最新文章

  1. 教你如何使用EXCEL中的lookup函数(摘自“MS帮助和支持”)
  2. 深度学习核心技术精讲100篇(二十三)-深度学习系列计算广告与推荐系统有哪些区别?使用的主流模型有哪些?
  3. 值传递和引用传递的讲解
  4. 第四章 数据的概括性度量
  5. 24、mysql连接线程的show和kill
  6. Android控件默认风格解析之SeekBar
  7. ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
  8. git远程删除分支后,本地git branch -a 依然能看到的解决办法
  9. 练习:----计算阶乘按钮
  10. linux命令:tail 命令
  11. 4dda在linux中的意思,LINUX基础学习之基础命令(4)和 文件的inode信息 --2019-11-28...
  12. VS2010 VB.net安装包生成过程
  13. 蝸居…唯一有共鳴的戲劇
  14. Springboot+Vue+Echarts实现51job大数据岗位分析数据大屏
  15. PHP开发之字符串长度以及字符串子串截取相关函数总结
  16. DES_3DES_AES_IDES_RSA密码算法比较
  17. C语言实现音乐播放器 visual studio 2019
  18. 网址打包(详细图文教程!) 使用HBuilder将网址打包成app
  19. 如何设计大型集团一体化IT运维系统
  20. 【智能优化算法-热交换算法】基于热交换优化算法求解多目标优化问题附matlab代码

热门文章

  1. ZT 安卓手机的安全性 prepare for Q
  2. 35岁+做互联网的你该何去何从呢?
  3. 腾讯云CVM使用体验
  4. struts使用下拉列表框[LabelValueBean的使用]
  5. 村上春树的经典语录合集
  6. Python整数进制间转换
  7. bbpress 添加 featured image
  8. 你知道么?好莱坞也是社交媒体的诞生地……
  9. android 坚挺通话广播_Android智能机 摩托罗拉MileStone坚挺
  10. ​PBlaze6上新!Memblaze发布首款基于长存颗粒的企业级SSD