for循环与while循环

for循环

格式:for 变量名 in 列表

do 命令1 ......

done

当变量值在列表里, for循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的 shell命令和语句。变量名为任何单词。 in列表用法是可选的,如果不用它, for循环使用命令行的位置参数。

简单的for循环

循环输出12345

for  loop in 1 2 3 4 5

do

echo $loop

done

相对字符串来说 变量后边的赋值也可以是字符串,或者是字符串和变量的结合

比如:echo "this is $loop"

或者在执行命令中输出ls的结果

比如:for loop in `ls`

do 

echo $loop

done

 

对for循环使用参数
在for循环中省去 in列表选项时,它将接受命令行位置参数作为参数。实际上即指明:
for
params in"$@"
params in"$*"

 

for params

do

echo this is test $params 

done

在运行脚本时,后边直接传入参数 进行输出即可

比如在循环中使用find命令 进行查询

for loop

do

echo find / -name $loop -print

done

 

使用for进行连接

hosts=172.16.8.44

for loop in $hosts

do

ping -c 2 $loop

done

 

循环计数
count=0

for files in *

do 

count=`expr $count + 1`

done

echo "there is $count files in `pwd`"

 

for循环和本地文档
在f o r循环体中可使用任意命令。下面的例子中,一个变量包含所有当前登录用户。使用who命令并结合 awk语言可实现此功能。然后 for循环循环每一用户,给其发送一个邮件,邮件信息部分用一个本地文档完成.

whos_on=`who -u | awk {print $1}`

for user in $whos_on

do

mail $user << mayday

hello,dear!

do you see this email!

mayday

$LOGNAME

done

 

for循环嵌入
嵌入循环可以将一个 for循环嵌在另一个 for循环内:
for 变量名1 in 列表1   

 do
     for 变量名2   i n 列表2   

   do
          命令1...
   done
done

 

for file in `ls`

do

   for dir in `find $file -type d `

   do

       number=`find $dir -type d | wc -l`

       echo "there is $number directories in `pwd` ,they are $dir"

       done

done

 

 

while循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据,其格式为:
while 命令
do
命令1
命令2
...
done
虽然通常只使用一个命令,但在 while和do之间可以放几个命令。命令通常用作测试条件。
只有当命令的退出状态为0时,do和done之间命令才被执行,如果退出状态不是0,则循环终止。
命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。

 

简单的while循环

count=0

while [ $count lt 5 ]

do

count=`expr $count + 1`

echo $count

done

 

使用while循环读键盘输入

echo "type <ctrl-D> to terminate"

echo -n "please input anykey: "

while read key

do

echo "yes, this is my input: $key"

done

 

用while循环从文件中读取数据。可以用一个变量保存每行数据,当不再有读取数据时条件为真。 

while循环使用输入重定向以保证从文件中读取数据。注意整行数据被设置为单变量 $line。
while read line

do

echo $line

done < name.txt

 

使用IFS读文件
输出时要去除冒号域分隔符,可使用变量 I F S。在改变它之前保存 I F S的当前设置。然后
在脚本执行完后恢复此设置。使用 I F S可以将域分隔符改为冒号而不是空格或 t a b键。

posted @ 2020-10-28 10:32  岁月倾城CTO  阅读(228)  评论(0)    收藏  举报