Shell中的while循环【转】

转自:http://blog.chinaunix.net/uid-25880122-id-2901409.html

while循环的格式

  1. while expression
  2. do
  3. command
  4. command
  5. ```
  6. done

1、计数器控制的while循环

主要用于已经准确知道要输入的数据和字符串的数目。

举例

  1. 1 #!/bin/sh
  2. 2 int=1
  3. 3 while(( $int<=5 ))
  4. 4 do
  5. 5 echo $int
  6. 6 let "int++"
  7. 7 done

2、结束标记控制的while循环

主要用于不知道读入数据的个数,但是可以设置一个特殊的数据值来结束循环,该特殊值称为结束标    记,通过提示用户输入进行操作。

举例

  1. 1 #用脚本演示使用结束标记控制while循环实现猜1~10内的数
  2. 2 #!/bin/sh
  3. 3
  4. 4 echo "Please input the num (1~~10): "
  5. 5 read num
  6. 6 while [[ $num != 4 ]]
  7. 7 do
  8. 8 if [ $num -lt 4 ]
  9. 9 then
  10. 10 echo "Too small ,Try again.."
  11. 11 read num
  12. 12 elif [ $num -gt 4 ]
  13. 13 then
  14. 14 echo "Too big ,Try again.. "
  15. 15 read num
  16. 16 else
  17. 17 exit 0
  18. 18 fi
  19. 19 done
  20. 20 echo "Yes ,you are right !!"

3、标致控制的while循环

用户输入标志值来控制循环结束

举例

  1. 1 #!/bin/sh
  2. 2 echo "Please input the num:"
  3. 3 read num
  4. 4 sum=0
  5. 5 i=1
  6. 6 signal=0
  7. 7 while [[ $signal != 1 ]]
  8. 8 do
  9. 9 if [ $i -eq $num ]
  10. 10 then
  11. 11 let "signal=1"
  12. 12 let "sum+=i"
  13. 13 echo "1+2、、、+$num=$sum"
  14. 14 else
  15. 15 let "sum=sum+i"
  16. 16 let "i++"
  17. 17 fi
  18. 18 done

4、命令行控制的while循环

举例

  1. 1 #!/bin/sh
  2. 2
  3. 3 echo "Please input arguements is $# "
  4. 4 echo "What you input : "
  5. 5 while [[ $* != "" ]]
  6. 6 do
  7. 7 echo $1
  8. 8 shift
  9. 9 done
时间: 2024-10-05 09:23:04

Shell中的while循环【转】的相关文章

三、Shell中分支与循环结构

if结构的语法格式 单分支结构 if <条件表达式>   then     指令 fi if <条件表达式>; then     指令 fi 双分支结构 if <条件表达式>; then     指令1 else     指令2 fi 多分支结构 if <条件表达式>; then     指令1 elif     指令2 elif     指令3 fi shell中的函数   shell函数是shell脚本中由命令集和语句组成的代码块,这个代码块可以被其他脚

shell中使用while循环ssh的注意事项

需要读取一个文本,次文本每一行包含一个IP在while循环中使用ssh,但ssh完第一行后就退出了,如何避免自动读取一行就跳出while循环,此文将详细解释其原因.      最近在写一个自动更新的shell,可是发现如果在使用while循环从一个文件中读取ip地址,然后访问就只能读取第一行纪录.代码如下: while read LINE do echo *******************************************$LINE ssh 192.168.10.233 ls

shell中使用while循环ssh时只循环第一行的问题解决

最近在写一个shell脚本,本想使用for循环来读取文件里面的内容,可是发现文件里每一行都有空格的,明显用for循环行不通过,我的目的是想一行一行读取文件内容,于是果断使用while循环来实现,可问题来了,当ssh完第一行后就退出了,后面都没有执行成功,如何避免自动读取一行就跳出while循环,此文将详细解释其原因. 文件内容如下:[[email protected]_hai~]#cat 2.txt scjz 2144 10.16.100.113  89scjz 2144 10.16.100.1

shell中的for循环出现语法错误(syntax error: bad for loop variable)

出现这种错误是因为有些linux系统默认会使用ash进行编译shell脚本,我的机器就是这样,但是我写的脚本是应该用bash执行的.虽然我在开头注明了#!/bin/bash,好像它还是默认去找了ash,真是让人无奈.上网搜索了一下,找到两种解决方案:1.修改脚本 2.修改系统默认执行shell的工具 第一种的具体做法就是,原来的for循环类似这种 for(( i=1; i<3; i++)),改成类似这种的:for  i in `seq 1000`,这是从一个网友的博客上抄来的,我不知道是否等价.

shell中while只循环一次的原因

一,事件描述: 1,#!/bin/bash cat  ../ip.txt | while read LINE do echo $LINE ssh $LINE "ls" done 结果循环一次后退出.原因是while中使用重定向机制,文件中的信息全部读入并重定向给了整个while语句,ssh语句正好读取输入中的所有东西,导致调用玩ssh语句后,输入缓存中已经都被读完了,当read语句再读的时候读不到一纪录,循环退出. 2,#!/bin/bash cat  ../ip.txt | whil

shell中的while循环实例

1.利用while循环计算1到100的和: 示例代码1: #!/bin/bashi=1sum=0while [ $i -le 100 ]do  let sum=sum+$i  let i++done echo $sum 示例代码2:利用while循环计算1到100之间所有奇数之和 #!/bin/bashi=1sum=0while [ $i -le 100 ]do  let sum=sum+$i  let i+=2done echo $sum 示例代码3:利用while循环计算1到100之间所有偶

shell 中可以for 循环的时间加减日期格式

for num in {88..3};do # LAST_HOUR=`date -d '-${num} hour' +%H` 不可for循环,报格式错误 LAST_HOUR=`date "+%H" -d -${num}hour` 原文地址:https://www.cnblogs.com/tnsay/p/9996826.html

shell中的select循环使用

select单独使用 cat select01.sh  #!/bin/bash echo "Which car do you prefer?" select CAR in Benz Audi VolksWagen do         break done echo "You chose $CAR" 运行结果 sh select01.sh  Which car do you prefer? 1) Benz 2) Audi 3) VolksWagen #? 1 You

shell中使用while循环ssh读取一行纪录

cat 33.txt |while read LINE do   result=`ssh -n [email protected] date`   echo $result done -n