aaahd 发表于 2018-8-26 13:43:30

shell脚本编程循环之for/while/untill循环

  循环执行: 将一段代码重复执行0、1或多次;
  进入条件:条件满足时才进入循环;
  退出条件:每个循环都应该有退出条件,以有机会退出循环;
  bash脚本:
  for循环
  while循环
  until循环
  for循环:
  两种格式:
  (1) 遍历列表
  (2) 控制变量
  (1)遍历列表:
  forVARAIBLEinLIST; do
  循环体
  done
  进入条件:只要列表有元素,即可进入循环;
  退出条件:列表中的元素遍历完成;
  LISTT的生成方式:
  (1) 直接给出;
  (2) 整数列表
  (a) {start..end}
  (b) seq ] last
  (3) 返回列表的命令
  (4) glob
  (5) 变量引用
  $@, $*
  示例:添加三个用户
#!/bin/bash  
#
  
for username in user21 user22 user23; do
  
    if id $username &> /dev/null; then
  
      echo "$username exists."
  
    else
  
      useradd $username && echo "Add user $username finished."
  
    fi
  
done
  示例:求100以内所有正整数之和;
#!/bin/bash  
#
  
declare -i sum=0
  
for i in {1..100}; do
  
    echo "\$sum is $sum, \$i is $i"
  
    sum=$[$sum+$i]
  
done
  
echo $sum
  示例:判断/var/log目录下的每一个文件的内容类型
#!/bin/bash  
#
  
for filename in /var/log/*; do
  
    if [ -f $filename ]; then
  
      echo "Common file."
  
    elif [ -d $filename ]; then
  
      echo "Directory."
  
    elif [ -L $filename ]; then
  
      echo "Symbolic link."
  
    elif [ -b $filename ]; then
  
      echo "block special file."
  
    elif [ -c $filename ]; then
  
      echo "character special file."
  
    elif [ -S $filename ]; then
  
      echo "Socket file."
  
    else
  
      echo "Unkown."
  
    fi
  
done
  for循环格式:
  forVARAIBLEinLIST; do
  循环体
  done
  for循环实现9*9乘法表
#!/bin/bash  
#
  
for j in {1..9}; do
  
    for i in $(seq 1 $j); do
  
      echo -n -e "${i}X${j}=$[${i}*${j}]\t"
  
    done
  
    echo
  
done
  while循环:
  whileCONDITION; do
  循环体
  循环控制变量修正表达式
  done
  进入条件:CONDITION测试为”真“
  退出条件:CONDITION测试为”假“
  示例:求100以内所有正整数之和;
#!/bin/bash  
#
  
declare -i sum=0
  
declare -i i=1
  

  
while [ $i -le 100 ]; do
  
    let sum+=$i
  
    let i++
  
done
  
echo $sum
  until循环:
  untilCONDITION; do
  循环体
  循环控制变量修正表达式
  done
  进入条件:CONDITION测试为”假“
  退出条件:CONDITION测试为”真“
  示例:求100以内所有正整数之和;
#!/bin/bash  
#
  
declare -i sum=0
  
declare -i i=1
  
until [ $i -gt 100 ]; do
  
    let sum+=$i
  
    let i++
  
done
  
echo $sum
  while循环的特殊用法(遍历文件的行):
  whilereadVARIABLE; do
  循环体;
  done</PATH/FROM/SOMEFILE
  依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将基赋值给VARIABLE变量;
  示例:找出ID号为偶数的用户,显示其用户名、ID及默认shell;
#!/bin/bash  
#
  
while read line; do
  
    userid=$(echo $line | cut -d: -f3)
  
    username=$(echo $line | cut -d: -f1)
  
    usershell=$(echo $line | cut -d: -f7)
  
    if [ $[$userid%2] -eq 0 ]; then
  
      echo "$username, $userid, $usershell."
  
    fi
  
done < /etc/passwd
  for循环的特殊用法:
  for((控制变量初始化;条件判断表达式;控制变量的修正语句)); do
  循环体
  done
  控制变量初始化:仅在循环代码开始运行时执行一次;
  控制变量的修正语句:每轮循环结束会先进行控制变量修正运算,而后再做条件判断;
  示例:求100以内所有正整数之和
#!/bin/bash  
#
  
declare -i sum=0
  
for ((i=1;i
页: [1]
查看完整版本: shell脚本编程循环之for/while/untill循环