bash6——循环

for fruit in apple orange pear    #写死
do
    each ${fruit}s
done

fruits="apple orange pear"   #输入变量的值
for f in $fruits

一、for循环

1、向for提供数据

1)写死 或 变量

2)read

3)从命令行读取$*    $@

  for fruit in $*; do  或者 for fruit; do(这一技术使用于函数,乱入函数:)

do_i_like()
{
    for fruit; do
    echo I realy like ${fruit}s
    done
}
do_i_like apple banana oranges

4)使用seq命令给for输入数据(用于产生从某个数到另外一个数之间的所有整数)

  # seq 1 10
  结果是1 2 3 4 5 6 7 8 9 10  

  for i in `seq 1 10`

  for host in `grep "172.30.0" /etc/hosts | awk '{ print $2 }'`

2  bash有类似C风格的for循环

  1 for ((i=1,j=100; i<=10; i++,j-=2 ))
  2 do
  3     printf "i=%03d j=%03d\n" $i $j
  4 done

 

二、while循环

在没有需要遍历的列表但在具有决定循环何时结束的可测试条件时,使用while最合适。

1)测试循环本身的变化

2)逐行读取文本文件的内容

read password < /etc/passwd读入一行
while read passwd
do
    echo $passwd      #这里可以加入好多功能!
done < /etc/passwd一直循环读,直到不再输入
#!/bin/bash
#通过管道循环读取/etc/passwd内容
cat /etc/passwd | while read line
do
#以:为分割符,只读取第一个字段
    user=`awk -F : '{print $1}' <<< ${line}`
    echo "Account: ${user}"
done

 

3)重定向到文件

  1 i=1
  2 while [ $i -lt 5 ]
  3 do
  4     echo "`date`" : Partition $i
  5     ls -ld /dev/sda$i
  6     sleep 1
  7     let i=$i+1
  8 done > partition.txt 2>partitionerror.txt

 

4)内置的:命令,或者是/bin/true命令,他们总是返回0,表示成功,使用他们可以让循环永远执行下去。

host=${1:-declan}
while grep -qw $host /tmp/hosts-to-ping.txt
do
    :
done

 

5)死循环

  1 while :    #中间有空格
  2 do
  3     echo 'xx'
  4     sleep 1
  5 done

用ctrl+c结束

三、嵌套循环

一个循环存在于另一个循环中

四、循环的break和continue

break  break 2退出两层;  

continue  continue 2表示要跳转的外层循环层数

五、带case的while循环

就是while里边使用case

六、until循环

除了测试条件相反,until循环与while循环在其他地方完全相同。即满足条件就退出循环

until 条件
dodone

七、select循环

非常适合编写菜单的循环,常和if、case等一起使用

它根本没有条件测试,退出的唯一方式是使用break或exit   打断用ctrl+c

提示符在$PS3变量

和for一样可以去掉in (x),这样select会使用自己所在的脚本或函数的$*参数

我的samba管理器好想可以用它做一个命令行的!

  1 select item in one two three four five
  2 do
  3     if [ ! -z $item ]; then
  4         echo "You choiced $item"
  5         break
  6     else
  7         echo "$REPLY is not valid"  用户输入的值在$REPLY变量
  8     fi
  9 done

 

posted @ 2017-04-20 20:57  daduryi  阅读(202)  评论(0编辑  收藏  举报