侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

第3章 shell结构化命令------------(文件数据的循环与控制循环)

2023-11-22 星期三 / 0 评论 / 0 点赞 / 55 阅读 / 6642 字

3.6 文件数据的循环与控制循环 通常需要迭代存储在文件内部的项:使用嵌套循环、更改环境变量IFS。通过更改环境变量IFS,可以迫使for命令将文件中的每行作为单独的一项来处理,即使数据包含空格。提

3.6 文件数据的循环与控制循环

         通常需要迭代存储在文件内部的项:使用嵌套循环、更改环境变量IFS。通过更改环境变量IFS,可以迫使for命令将文件中的每行作为单独的一项来处理,即使数据包含空格。提取了文件中的个别行之后,可能还必须再循环以提取包含的数据。

         循环开始之后就不得不继续循环直到它完成所有的迭代。其实不然,有两条命令可以帮助控制循环内部发送的事情:break命令、continue命令

3.6.1 文件数据的循环

         该脚本使用两个不同的IFS值解析数据。第一个IFS值解析文件/etc/passwd中的单独行。这个问题的典型示例是在/etc/passwd文件中处理数据。这就需要逐行迭代文件/etc/passwd,然后将变量IFS的值更改为冒号,以便能将每行中的单个组成部分分离出来。        

#!/bin/bash#文件数据的循环:使用嵌套循环,更改环境变量IFS。IFS.OLD=$IFSIFS=$'/n'for entry in `cat /etc/passwd`do  echo "Values in $entry -"  IFS=:  for value in $entry  do    echo " $value"  donedone

3.6.2 break命令

         break命令是在处理过程中跳出循环的一种简单方法。可以使用break命令退出任何类型的循环,包括while循环和until循环。

1.跳出单循环

         shell执行break命令时,它试图跳出当前正在处理的循环。for循环通常迭代列表中指定的所有值,当if-then条件满足时,shell执行break命令,终止for循环。            

#!/bin/bash#跳出单循环for n in 1 2 3 4 5 6 7 8 9 10do   if [ $n -eq 5 ]  then    break  fi  echo "迭代数:"$ndoneecho "for循环完成!"var=1while [ $var -lt 10 ]do if [ $n -eq 5 ]  then    break  fi  echo "迭代数:"$ndoneecho "while循环完成!"

         2.跳出内循环

         使用多循环时break命令自动终止所在的最里面的内部循环。内循环的for语句规定迭代到变量b的值等于100。内循环的if-then语句指定变量b的值等于5时,执行break命令。注意,即使内循环被break命令终止,外循环会继续按执行进行。          

#!/bin/bash#跳出内循环for(( i=1;i<=4;i++ ))do  echo "外循环:"$i  for(( j=1;j<100;j++ ))  do    if [ $j -eq 5 ]    then      break    fi    echo "  内循环:"$j  donedone

         3.跳出外循环

         有时处于内循环但需要停止外循环。break命令包括单独的命令行参数值:break n。n表明要跳出的循环级别。默认情况下,n是1,代表跳出当前循环。如果将n设置为2,break命令将停止外循环的下一级循环。       

#!/bin/bash#跳出内循环for(( i=1;i<=4;i++ ))do  echo "外循环:"$i  for(( j=1;j<100;j++ ))  do    if [ $j -eq 5 ]    then      #跳出外循环      break 2    fi    echo "  内循环:"$j  donedone
 

3.6.3 continue命令

         continue命令是一种提前停止循环内命令,而不完全终止循环的方法。这就允许在循环中设置shell不执行命令的条件。在while循环和until循环中可以使用continue命令,当shell执行continue命令时,它跳过余下的命令。

         与使用break命令一样,continue命令也允许使用命令参数指定要继续的循环级别:continue n。其中,n定义了要继续的循环级别。使用continue命令停止处理循环内部的命令,但是继续外部循环。注意在脚本输出中,迭代的值为3时不处理任何内循环语句,因为continue命令停止了处理,但是继续外循环处理。            

#!/bin/bash#continue与for命令操作实例for(( var1=1;var1<15;var1++ ))do  if [ $var1 -gt 5 ] && [ $var1 -lt 10 ]  then    continue  fi  echo "for的迭代数字:"$var1done#continue -n命令操作实例for(( var1=1;var1<=5;var1++ ))do  echo "迭代次数:$var1"  for (( b=1;b<3;b++ ))  do  if [ $var1 -gt 2 ] && [ $var1 -lt 4 ]  then    continue 2  fi  var3=$[ $var1*$b ]  echo "$var1*$b="$var3  donedone#continue与while命令操作实例var1=0while echo "while 迭代次数:$var1"      [ $var1 -lt 3 ]do  if [ $var1 -gt 1 ] && [ $var1 -lt 3 ]  then    continue  fi  echo "内部迭代次数:"$var1  var1=$[ $var1 + 1 ]done

         可以在shell脚本中使用管道或者重定向循环输出结果。可以通过在done命令的末尾添加处理命令来做到这一点。            

#!/bin/bash#continue与for命令操作实例for(( var1=1;var1<15;var1++ ))do  if [ $var1 -gt 5 ] && [ $var1 -lt 10 ]  then    continue  fi  echo "for的迭代数字:"$var1done | sort -r#continue -n命令操作实例for(( var1=1;var1<=5;var1++ ))do  echo "迭代次数:$var1"  for (( b=1;b<3;b++ ))  do  if [ $var1 -gt 2 ] && [ $var1 -lt 4 ]  then    continue 2  fi  var3=$[ $var1*$b ]  echo "$var1*$b="$var3  donedone >continue.txt

广告 广告

评论区