linux用while循环值丢失,我使用过的Linux命令之while - Bash中的While循环(转)

我使用过的Linux命令之while - Bash中的While循环

用途说明

while循环是Shell中常用的语法结构,它与其他编程语言中的while有些类似,只是写法有些不一样罢了。

常用格式

格式一

while 条件;

do

语句

done

格式二 死循环

while true

do

语句

done

格式三 死循环

while :

do

语句

done

格式四 死循环

while [ 1 ]

do

语句

done

格式五 死循环

while [ 0 ]

do

语句

done

使用示例

示例一

Bash代码

873280b1c88ee308d9fc2feaea8bd512.png

COUNTER=0

while [  $COUNTER -lt 10 ]; do

echo The counter is $COUNTER

let COUNTER=COUNTER+1

done

[root@jfht ~]# COUNTER=0

[root@jfht ~]# while [  $COUNTER -lt 10 ]; do

>     echo The counter is $COUNTER

>     let COUNTER=COUNTER+1

> done

The counter is 0

The counter is 1

The counter is 2

The counter is 3

The counter is 4

The counter is 5

The counter is 6

The counter is 7

The counter is 8

The counter is 9

[root@jfht ~]#

这个while循环改用for循环更好些

Bash代码

873280b1c88ee308d9fc2feaea8bd512.png

for ((COUNTER=0; COUNTER<10; ++COUNTER))

do

echo The counter is $COUNTER

done

[root@jfht ~]# for ((COUNTER=0; COUNTER<10; ++COUNTER))

> do

>     echo The counter is $COUNTER

> done

The counter is 0

The counter is 1

The counter is 2

The counter is 3

The counter is 4

The counter is 5

The counter is 6

The counter is 7

The counter is 8

The counter is 9

[root@jfht ~]#

示例二

Bash代码

873280b1c88ee308d9fc2feaea8bd512.png

while true

do

date

sleep 1

done

[root@jfht ~]# while true

> do

>     date

>     sleep 1

> done

2010年 10月 10日 星期日 16:35:22 CST

2010年 10月 10日 星期日 16:35:23 CST

2010年 10月 10日 星期日 16:35:24 CST

2010年 10月 10日 星期日 16:35:25 CST

2010年 10月 10日 星期日 16:35:26 CST

2010年 10月 10日 星期日 16:35:27 CST

Ctrl+C

[root@jfht ~]#

示例三 读取输入

Java代码

873280b1c88ee308d9fc2feaea8bd512.png

while read line

do

echo $line

done

[root@jfht ~]# while read line

> do

>     echo $line

> done

hello

hello

world

worldCtrl+D

[root@jfht ~]#

实例四 处理命令行参数

文件 while_4.sh

Bash代码

873280b1c88ee308d9fc2feaea8bd512.png

#!/bin/sh

usage()

{

echo "usage: $0 [-a] [-e ] [-f ] [-h] [-d ] [-s ] [-q] [-x ]"

}

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

echo "ALARM=$ALARM"

echo "ADMIN=$ADMIN"

[root@jfht ~]# cat while_4.sh

#!/bin/sh

usage()

{

echo "usage: $0 [-a] [-e ] [-f ] [-h] [-d ] [-s ] [-q] [-x ]"

}

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

echo "ALARM=$ALARM"

echo "ADMIN=$ADMIN"

[root@jfht ~]# chmod +x while_4.sh

[root@jfht ~]# ./while_4.sh

ALARM=

ADMIN=

[root@jfht ~]# ./while_4.sh -a

ALARM=TRUE

ADMIN=

[root@jfht ~]# ./while_4.sh -e hy

ALARM=

ADMIN=hy

[root@jfht ~]#

问题思考

1. 为什么 while [ 0 ] 也会是死循环?

2. 怎么使用while read line从文件中读入数据?

相关资料

【1】BASH Programming - Introduction HOW-TO 7.3 While sample

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值