首页 > 代码库 > shell中的for、while、until
shell中的for、while、until
for var in list do commands done
在每个迭代中,变量var会包含列表中的当前值,第一个迭代会使用列表中的第一个值,第二个迭代使用第二个值。
在do和done中,$var变量包含着这次迭代对应的当前值。
只要你愿意,可以将do语句和for语句放在同一行,但必须用分号将其同列表中的值分开。 for var in list;do。
#! /bin/bash for test in Alabama Alaska Arizona Arkansas California Colorado do echo The next state is $test done
在最后一次迭代后,$test变量的值会在shell脚本的剩余部分一直保持有效。它会一直保持最后一次迭代的值(除非你修改了它)。
shell看到for列表值中的单引号并尝试使用它们来定义一个单独的数据值,这个过程一团混乱。
两种解决办法:
1)使用转义字符(反斜线)来将单引号转义
2)使用双引号来定义用到单引号的值。
如:
for test in I don‘t know if this‘ll work do echo "word: $test" done 执行结果: liuxj@liuxj-Lenovo:~/shell_test$ ./for_test word: I word: dont know if thisll word: work
修改后
for test in I don\‘t know if "this‘ll" work do echo "word: $test" done 执行结果: liuxj@liuxj-Lenovo:~/shell_test$ ./for_test word: I word: don‘t word: know word: if word: this‘ll word: work
for循环假定每个中值都是用空格分割的。注意:如果有包含空格的数据值,可用双引号将其包含起来,shell不会将双引号当成值的一部分。
从变量读取列表
通常shell脚本遇到的情况是,将一系列值都集中在一个变量中,然后需要遍历整个列表。
list="Alabama Alaska Arizona Arkansas Colorado" list=$list" Connecticut" for state in $list do echo "Have you ever visited $state?" done
结果:
Have you ever visited Alabama? Have you ever visited Alaska? Have you ever visited Arizona? Have you ever visited Arkansas? Have you ever visited Colorado? Have you ever visited Connecticut?
注意:代码中用了另一个赋值语句来向$list变量包含的已有列表添加了一个值。这是向变量中存储的已有文本字符串尾部添加文本的一个常用方法。
从命令读取值
用反引号来执行任何能产生输出的命令。在states的文件中输入一些参数。
file="states" for state in `cat $file` do echo "Visit beautiful $state" done
在linux中,目录名和文件名中包含空格当然是合法的,要容纳这种值,你应该将$file变量用双引号圈起来。
shell脚本中多行的注释:
if false; then 语句1 语句2 语句3 语句4 fi
如:
#! /bin/bash if false;then for test in Alabama Alaska Arizona Arkansas California Colorado do echo The next state is $test done fi
shell中的for、while、until
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。