Linux下Shell的for循环语句示例

循环不管在程序中还是脚本中都需要经常用到,在写shell脚本时,经常需要for进行100次循环。for 循环是固定循环,也就是在循环时已经知道需要进行几次循环。有时也把 for 循环称为计数循环。

Linux下Shell的for循环语句示例

Shell for循环语法

for 变量 in 列表 do command1 command2 ... commandN done

**也可以写成:for var in list; do

读取列表中的值

#!/bin/bash #basic for command for linuxidc in Linux公社 Linuxmi linux Ubuntu do echo The next state is $linuxidc done

执行结果:

linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.sh
The next state is Linux公社
The next state is Linuxmi
The next state is linux
The next state is Ubuntu

Linux下Shell的for循环语句示例

在最后一次迭代后,$linuxidc变量的值会在shell脚本的剩余部分保持有效。它会一直保持最后一次迭代的值(除非你已经修改了它)。

读取列表中的复杂值

有两种解决办法:

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

*使用双引号来定义用到单引号的值。

#!/bin/bash #basic for command for linuxidc in Kotlin Linuxmi\'com linux Ubuntu "CentOS'rhel" Oracle do echo The next state is $linuxidc done

执行结果:

linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.sh
The next state is Kotlin
The next state is Linuxmi'com
The next state is linux
The next state is Ubuntu
The next state is CentOS'rhel
The next state is Oracle

Linux下Shell的for循环语句示例

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

从变量读取列表

将一系列的值都集中存储在一个变量中,然后需要遍历变量中的整个列表。

#!/bin/bash #using a variable to hold the list list="Linuxidc Linuxmi Ubuntu Fedora" #向已有列表中添加或拼接一个值 list=$list" success" for state in $list do echo "this word is $state" done

执行结果:

linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.sh
this word  is Linuxidc
this word  is Linuxmi
this word  is Ubuntu
this word  is Fedora
this word  is success

Linux下Shell的for循环语句示例

从命令读取值

有两种方式可以将命令输出赋值给变量:

(1)反引号字符(`)

(2)$()格式

例如:

linuxidc=`date`
linuxidc=$(date)

生成列表中所需值就是使用命令的输出。

#!/bin/bash # reading values from a file file="states" for state in $(cat $file) do echo "welcome $state" done

states文件内容;


Hello World
Linuxmi com
linuxidc.net Linux公社

执行结果:

linuxidc@linuxidc:~/linuxidc.com$ ./linuxidc.sh
welcome
welcome Hello
welcome World
welcome Linuxmi

Linux下Shell的for循环语句示例

更改字段分隔符

造成这个问题的原因是特殊的环境变量IFS,叫作内部字段分隔符。默认情况下,bash shell会将下列字符当作字段分隔符:

*空格

*制表符

*换行符

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

想修改IFS的值,使其只能识别换行符,那就必须:

IFS=$'\n'

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12010.html