欢迎来到天天文库
浏览记录
ID:15512218
大小:76.00 KB
页数:11页
时间:2018-08-03
《一些很好的shell诀窍》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、连续循环现在来看循环,它允许您执行重复任务,比如对一组文件执行一些操作或命令。Shell有几种构造循环的方法。构造for循环最常见的循环结构是for循环。首先定义一个变量作为循环的名称,提供一组成员,可以是包括整数和文件名在内的任何单词,然后提供每次重复执行的命令。每个命令都以分号结束(;),整个命令组以位于单词do和done之间。清单20描述了它的结构。清单20.Shell中循环的结构forloopnameinmembersdocommand;command;...command;done在循环的第一次重
2、复中,loopname变量获取第一个成员的值。然后loopname的值被清单中下一个成员的值替代,接下来它继续重复直到遍历所有成员。在大多数Shell中,do和done都可以被大括号所替代,如清单21中所示。清单21.Shell循环的替代结构forloopnameinmembers{command;command;...command;}键入清单22中的文本来运行包含三个成员的简单循环:清单22.使用循环来改变变量的值$foriin123>{>VAR=$(($VAR+$i))>echo$i:$VAR>}1:
3、12:33:6$针对目录中的每个文件执行命令您可以使用循环针对给定的一组文件执行一个或一组命令。如果您提供文件的名称作为for循环的成员,那么循环按您提供名称的顺序在每个文件上执行操作。您可以两次提供同一个文件,循环将依次对该文件执行操作。在您的example目录中尝试使用清单23中的文本执行上述操作。清单23.利用一组文件构造循环$cd~/example$lsABC$forfileinCBBC>{>echo$file>}CBBC$要对同一目录下的所有文件执行操作,可以使用星号(*)作为循环的唯一成员,如清
4、单24中所示。Shell将星号扩展为目录中的所有文件。然后,对于循环中您要对所有文件执行的命令,使用loopname变量作为合适的参数或选项。清单24.针对目录中的所有文件执行同一命令$lsABC$forfilein*>{>mv$file$((0x$file))>}$如果您正在运行本教程中的所有示例,那么您的example目录中的内容应该已改变:$ls101112$发生的情况是循环中的mv命令将文件的名称从十六进制值(通过在名称的前面插入0x构成)更改为与它相等的十进制值。构造while循环您可以构造一种当
5、满足某些条件就一直运行的循环。使用while条件语句来实现这一目标,其格式如清单25所示。清单25.Shellwhile循环的结构while[condition];docommand;command;...command;done在循环中,condition可以是使用操作符(请参见表3)构建的语句,或者可以像一个变量名那样简单。只要值是非0的,就代表真。表3.常用Shell操作符操作符描述-eq等于-ne不等于-lt小于-le小于等于-gt大于-ge大于等于构造while循环时,有一些注意事项需要牢记在心。
6、首先,在条件与将它括起来的括号之间必须留有空白字符。其次,如果在条件中将变量用于数字比较,那么在while语句之前必须首先定义该变量。键入清单26中的文本以执行一个简短的while循环:清单26.使用while循环更改变量$VAR=0$while[$VAR-lt10];do>echo$VAR;>VAR=$(($VAR+1));>done0123456789$构造until循环until条件语句与while相似并使用相同的操作符,但是它们的行为相反。它只有当条件为假时才执行循环,并且循环持续重复直到给定的条件
7、为真。它的格式在清单27中说明。清单27.Shelluntil循环的结构until[condition];docommand;command;...command;done通过键入清单28中所示的内容尝试运行一个简短的until循环:清单28.使用until循环更改变量$VAR=10$until[$VAR-eq0];do>echo$VAR;>VAR=$(($VAR-1));>done10987654321$嵌套多重循环您可以嵌套循环和组合多种类型的循环来执行各种类型的复杂操作。由于for循环的成员不必是数字
8、或以任意类型的顺序排列,因此您可以使用稍后在某个内部循环中作为命令执行的命令名称作为其成员,比如printf、echo、stop、resume,等等。尝试运行清单29中的示例。这是一个执行算术替换的until循环,同时嵌套在循环词未按数字顺序排列的for循环内部。清单29.使用嵌套循环进行算术替换$foriin2501002136875>{>VAR=10;>until[$VAR-eq0];do>echo"$i/$
此文档下载收益归作者所有