Bash While循环示例

时间:2020-01-09 10:37:28  来源:igfitidea点击:

如何在Linux/UNIX操作系统下使用bash while循环重复执行特定任务?
如何使用while语句设置无限循环?
您可以提供while循环示例吗?

" bash while 循环"是一个控制流语句,它允许根据给定条件重复执行代码或命令。
例如,运行echo命令5次,或者逐行读取文本文件,或者评估脚本在命令行上传递的选项。

bash while循环语法

语法如下:

while [ condition ]
do
   command1
   command2
   command3
done

command1到command3将重复执行直到条件为真。

while循环的参数可以是任何布尔表达式。
当条件从不评估为false时,将发生无限循环。
这是while循环一线语法:

while [ condition ]; do commands; done
while control-command; do COMMANDS; done

例如,以下while循环将在屏幕上打印欢迎信息5次:

#!/bin/bash
x=1
while [ $x -le 5 ]
do
  echo "Welcome $x times"
  x=$(( $x + 1 ))
done

这是上面的代码,只不过是一个班轮而已:

x=1; while [ $x -le 5 ]; do echo "Welcome $x times" $(( x++ )); done

这是一个使用while循环来计算阶乘的示例shell代码:

#!/bin/bash
counter=
factorial=1
while [ $counter -gt 0 ]
do
   factorial=$(( $factorial * $counter ))
   counter=$(( $counter - 1 ))
done
echo $factorial

要运行,只需键入:

$ chmod +x script.sh
$ ./script.sh 5

在我的Ubuntu Linux桌面上运行的while循环

while循环通常用于从文件逐行读取数据:

#!/bin/bash
FILE=
# read $FILE using the file descriptors
exec 3<&0
exec 0<$FILE
while read line
do
	# use $line variable to process line
	echo $line
done
exec 0<&3

您可以使用while循环轻松评估在命令行中为脚本传递的选项:

......
..
while getopts ae:f:hd:s:qx: option
do
        case "${option}"
        in
                a) ALARM="TRUE";;
                e) ADMIN=${OPTARG};;
                d) DOMAIN=${OPTARG};;
                f) SERVERFILE=$OPTARG;;
                s) WHOIS_SERVER=$OPTARG;;
                q) QUIET="TRUE";;
                x) WARNDAYS=$OPTARG;;
                \?) usage
                    exit 1;;
        esac
done
.......
..

如何将while用作无限循环?

可以使用空表达式创建无限的while,例如:

#!/bin/bash
while :
do
	echo "infinite loops [ hit CTRL+C to stop]"
done

带break语句的条件while循环退出

您可以使用whil循环中的break语句来提前退出。
您可以使用break从WHILE中退出。

while循环内的一般break语句如下:

while [ condition ]
do
   statements1      #Executed as long as condition is true and/or, up to a disaster-condition if any.
   statements2
  if (disaster-condition)
  then
	break       	   #Abandon the while lopp.
  fi
  statements3          #While good and, no disaster-condition.
done

在此示例中,当用户输入-1时,break语句将跳过while循环,否则它将继续添加两个数字:

#!/bin/bash
 
while :
do
	read -p "Enter two numnbers ( - 1 to quit ) : " a b
	if [ $a -eq -1 ]
	then
		break
	fi
	ans=$(( a + b ))
	echo $ans
done

早期继续执行continue语句

要恢复封闭的WHILE循环的下一次迭代,请使用Continue语句,如下所示:

while [ condition ]
do
  statements1      #Executed as long as condition is true and/or, up to a disaster-condition if any.
  statements2
  if (condition)
  then
	continue   #Go to next iteration of I in the loop and skip statements3
  fi
  statements3
done