shell 结构化命令之循环
来源:互联网 发布:wegame 知乎 编辑:程序博客网 时间:2024/06/06 01:09
在前面说到过shell-结构化命令之跳转,再来说一说循环命令的使用。
一、for命令
下面是bash shell中for命令的基本格式:
for var in listdo commandsdone
在每次迭代过程中,变量var会包含列表中的当前值,$var变量包含着这次迭代对应的当前列表项中的值。可以通过以下几种方式来指定列表:
读取列表中的值:
最简单的用法就是,直接指定一系列值,如下:
~
读取列表中的复杂值:
我们先看以下,运行下面的脚本会输出什么:
#!/bin/bashfor test in I'm very happy today's nightdo echo "The next string is $test"done
可以发现,它将单引号中的字符串设别成了一个字符,所以没有达到我们想要的效果。
有两种方法可以解决这个问题:
- 使用转义字符\
- 用双引号“ ”来定义用到的值
for循环默认认为每个值都是由空格分割的。
从变量读取值:
使用起来也是很简单的,只是先定义了一个变量,如下所示:
~
从命令读取值:
如下,使用$(command)
就可以将命令作为列表读入for循环中。
#!/bin/bashfor file in $(ls)do echo "The file/folder is $file"done
这里显示了当前目录下的所有文件或文件夹名。
更改字段分隔符:
有个环境变量叫做IFS(internal field separator),即内部字段分隔符。默认情况下,bash shell将空格、制表符、换行符当做字段分隔符。可以这样来修改IFS的值:IFS=
,比如,我们可以使用如下代码,拆分当前路径:
#!/bin/bashIFS.OLD=$IFSIFS=/for file in $(pwd)do echo "The path is: $file"done
如果想使用多个分隔符,直接将其它们在赋值行串起来即可。这里了使用IFS.OLD=$IFS;IFS=/
先将默认的分隔符保存起来,使用完毕之后可以将其恢复。
使用通配符读取目录:
可以在for循环中使用通配符来处理目录中的文件。如下图所示我们匹配了用户目录下所有已test开头的文件和文件夹。
稍加修改就可以完成更加强大的功能,比如遍历某个目录下的文件和目录,并用test命令将其进行分类。
注意:我们可以在数据列表中放入任何东西,比如前面说到的数值、文件和目录。
使用C语言分风格的for命令:使用双小括号
如同我们在shell-结构化命令之跳转中说到的在if语句重中使用双小括号来实现高级的数学表达式一样。for循环中也可以使用双小括号来实现C语言风格的变量引用方式(其实也类似于数学表达式),格式为for(( expression ))
,这里的表达式类似于C语言等语言中的。给一个简单的例子:
二、while&until命令
while命令的格式如下:
while test commanddo other commandsdone
test command这里和之前if中的test命令一模一样。
until命令和while的工作方式完全相反,其格式如下:
until test commands other commandsdone
直到test命令返回退出状态码为0时,循环才结束;退出状态码不为0时,往下执行循环。
三、break&continue命令
和其他编程语言中的完全类似:
break用于:
- 跳出单个循环,此循环终止
- 跳出内部循环(嵌套循环时)
- 跳出外部循环(break n,用n指定外部循环的层级)
continue用于:
- 提前终止某次循环,但并不会终止整个循环
- shell 结构化命令之循环
- Shell循环与结构化命令
- shell之循环结构
- shell之循环语句结构
- 第三章:shell结构化命令 for & while循环
- linux SHELL之结构化命令
- Shell脚本编程之结构化命令
- shell 结构化命令之跳转
- shell 结构化命令
- 第3章 shell结构化命令------------(文件数据的循环与控制循环)
- Linux Shell笔记之结构循环
- linux初学习之-循环与结构化命令
- 循环与结构化命令
- shell编程之结构化命令if-then
- 第3章 shell结构化命令------------(C式的for循环)
- 第3章 shell结构化命令------------(while、until循环,九九乘法表)
- linux命令行与shell脚本大全_第十二章_更多结构化命令_循环
- linux Shell 结构化命令
- vue路由切换拦截,在每次发生路由导航时检测用户是否登录
- 神经网络结构盘点Neural Networks Zoo
- NAT技术与代理服务器调研
- 6月17日最新雅思写作高分范文
- Ruby学习-数字和字符串
- shell 结构化命令之循环
- Maven依赖的配置
- 如何在更改全局JDK版本1.7.0情况下,让Presto使用JDK1.8.0呢?
- 文件ZIP压缩
- sublineText3删除插件
- 使用Pycharm,遇到unresolved reference的解决办法
- ios 相机开发 自动对焦
- runtime简单使用
- 善良的老总