while 循环

时间:2019-04-16 23:59:05  来源:igfitidea点击:

语法

while [ condition ]
do
        command1
        command2
        ..
        ....
        commandN
done

当条件condition为true时,将执行命令command1到commandN。

一行行读取文本文件的语法:

while IFS= read -r line
do
        command1 on $line
        command2 on $line
        ..
        ....
        commandN
done < "/path/to/filename"

示例

检测变量值进行循环

#!/bin/bash
# set n to 1
n=1

# 一直循环,直到$n等于5
while [ $n -le 5 ]
do
	echo "Welcome $n times."
	n=$(( n+1 ))	 # $n 加一
done

还可以使用**((表达式))**语法来替代条件语句 [condition]

#!/bin/bash
# set n to 1
n=1
while (( $n <= 5 ))
do
	echo "Welcome $n times."
	n=$(( n+1 )) # $n 加一
done

bash shell一行行读取文本文件示例

#!/bin/bash
file=/etc/resolv.conf
while IFS= read -r line
do
        # echo line is stored in $line
	echo $line
done < "$file"

shell读取文件字段示例

#!/bin/bash
file=/etc/resolv.conf
# 每行的文本,根据空格分隔,存放到f1和f2变量中。这种方法用于读取/etc/passwd 和 /etc/hosts等文件非常实用
while IFS=' ' read -r f1 f2
do
	echo "field # 1 : $f1 ==> field #2 : $f2"
done < "$file"

while死循环

在while中设置一个无限循环可以使用:

true命令—什么都不做,成功(总是返回退出码0)
false命令—什么都不做,不成功(总是返回退出码1)
:命令-无效;该命令什么也不做(总是返回退出码0)

#!/bin/bash
while true
do
	echo "这里可以执行一些命令;按[CTRL+C]停止!"
done
#!/bin/bash
while false
do
	echo "这里可以执行一些命令;按[CTRL+C]停止!"
done
#!/bin/bash
# 设置一个无限while循环的推荐语法
while :
do
	echo "这里可以执行一些命令;按[CTRL+C]停止!"
done

一个使用while循环的菜单驱动程序

菜单驱动程序通常会继续运行,直到用户选择退出主菜单

下面的菜单驱动程序通常会继续,直到用户选择退出按4选项。
case语句用于匹配$choice变量的值,它将根据用户的选择采取适当的操作。

#!/bin/bash
# 设置无限循环
while :
do
	clear
        # 显示菜单
        echo "服务器名称 - $(hostname)"
	echo "-------------------------------"
	echo "    主菜单            "
	echo "-------------------------------"
	echo "1. 显示日期和实际."
	echo "2. 显示用户的操作."
	echo "3. 显示网络连接."
	echo "4. 退出"
        # 获取用户输入
	read -p "请输入你的选择 [ 1 -4 ] " choice
        # 使用 case..in..esac 进行判断 
	case $choice in
		1)
			echo "今天是 $(date)"
			read -p "按[回车]键继续..." readEnterKey
			;;
		2) 
			w	
			read -p "按[回车]键继续..." readEnterKey
			;;
		3)
			netstat -nat
			read -p "按[回车]键继续..." readEnterKey
			;;
		4)
			echo "再见!"
			exit 0
			;;
		*)
			echo "Error: 无效的选择..."	
			read -p "按[回车]键继续..." readEnterKey
			;;
	esac		
				
done