《Linux命令行与shell脚本编程大全》第十三章 学习笔记
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脚本编程大全》第十三章 学习笔记相关推荐
- Linux_《Linux命令行与shell脚本编程大全》第二章学习总结
时间:2017年04月05日 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>(第三版 ...
- Linux命令行与shell脚本编程大全第三版 学习笔记
Linux自己的文件资料: /usr/share/doc (在你的Linux系统中) https://www.osyunwei.com/archives/290.html 0. 注意Linux中一切皆 ...
- Linux_《Linux命令行与shell脚本编程大全》第十章学习总结
时间:2017年08月24日星期四 说明:本文部分内容均摘取自书籍<Linux命令行与shell脚本编程大全>,版权归原作者所有.<Linux命令行与shell脚本编程大全>( ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter17-ChapterB )
十七.创建函数 bash shell 提供了用户自定义函数功能,可以将 shell 脚本代码放入函数中封装起来. 函数是一个脚本代码块,你可以为其命名并在脚本中的任何位置重用它.每当需要在脚本中使用该 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter16-脚本控制
十六.脚本控制 Linux 利用信号与系统中的进程进行通信. 重温 Linux 信号 Linux 系统和应用程序可以产生超过 30 个信号.在 shell 脚本编程时会遇到的最常见的 Linux 系统 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter1-Chapter16 )
一.初识 Linux shell Linux 系统可划分为以下 4 部分. Linux 内核 GNU 工具 图形化桌面环境 应用软件 内核主要负责以下 4 种功能. 系统内存管理 内核通过硬盘上称为交 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter6-Linux 环境变量
六.Linux 环境变量 bash shell 使用环境变量来存储 shell 会话和工作环境的相关信息(这也是被称作环境变量的原因).环境变量允许在内存中存储数据, 以便 shell 中运行的程序或 ...
- 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter9-安装软件
九.安装软件 软件包管理系统使用数据库来记录下列内容: Linux 系统中已安装的软件包. 每个软件包安装了哪些文件. 每个已安装的软件包的版本. 软件包存储在称为仓库(repository)的服务器 ...
- Linux命令行与shell脚本编程大全:第2版
<Linux命令行与shell脚本编程大全:第2版> 基本信息 作者: (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍] 译者: 武海峰 丛书名: 图 ...
- 《Linux命令行与shell脚本编程大全 第3版》Shell脚本编程基础---34
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: 转载于:https://www.cnbl ...
最新文章
- 教你如何使用EXCEL中的lookup函数(摘自“MS帮助和支持”)
- 深度学习核心技术精讲100篇(二十三)-深度学习系列计算广告与推荐系统有哪些区别?使用的主流模型有哪些?
- 值传递和引用传递的讲解
- 第四章 数据的概括性度量
- 24、mysql连接线程的show和kill
- Android控件默认风格解析之SeekBar
- ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
- git远程删除分支后,本地git branch -a 依然能看到的解决办法
- 练习:----计算阶乘按钮
- linux命令:tail 命令
- 4dda在linux中的意思,LINUX基础学习之基础命令(4)和 文件的inode信息 --2019-11-28...
- VS2010 VB.net安装包生成过程
- 蝸居…唯一有共鳴的戲劇
- Springboot+Vue+Echarts实现51job大数据岗位分析数据大屏
- PHP开发之字符串长度以及字符串子串截取相关函数总结
- DES_3DES_AES_IDES_RSA密码算法比较
- C语言实现音乐播放器 visual studio 2019
- 网址打包(详细图文教程!) 使用HBuilder将网址打包成app
- 如何设计大型集团一体化IT运维系统
- 【智能优化算法-热交换算法】基于热交换优化算法求解多目标优化问题附matlab代码