shell

shell.2.5 bash脚本编程(while循环、until循环)

 

while循环语法格式:

while  CONDITION; do
          循环体
          循环控制变量修正表达式
done

进入条件:CONDITION测试为’真’;
退出条件:CONDITION测试为’假’;

until循环语法格式:

until  CONDITION; do
        循环体
        循环控制变量修正表达式
done

进入条件:CONDITION测试为’假’;
退出条件:CONDITION测试为’真’;

********************************************************

举例1:计算100以内正整数之和;

#!/bin/bash
#

# for looping statements:
echo
echo "for looping statements:"
echo

declare -i sum1=0

for i in {1..100};do
  let sum1+=$i
done

echo "$sum1"


# while looping statements:
echo
echo "while looping statements:"
echo

declare -i sum2=0
declare -i i=1

while [ $i -le 100 ];do
  let sum2+=$i
  let i++
done

echo "$sum2"


# until looping statements:
echo
echo "until looping statements:"
echo

declare -i sum3=0
declare -i i=1

until [ $i -gt 100 ];do
  let sum3+=$i
  let i++
done

echo "$sum3"
echo

举例2:分别求100以内所有偶数之和,所有奇数之和(for/while/until)

#!/bin/bash
#

# for 循环语句写法;
echo
echo "分别求100以内所有偶数之和,所有奇数之和;:"
echo "for 循环语句写法计算结果:"

declare -i even_sum=0
declare -i odd_sum=0

for i in {1..100}; do
  mdo=$[$i%2]
  if [ $mdo -eq 0 ]; then
    even_sum+=$i
  else
    odd_sum+=$i
  fi
done

echo -e "even_sum=$even_sum.\todd_sum=$odd_sum."
echo

# while 循环语句写法;

echo "while 循环语句写法计算结果:"

declare -i even_sum=0
declare -i odd_sum=0

declare -i i=1

while [ $i -le 100 ]; do
  mdo=$[$i%2]
  if [ $mdo -eq 0 ]; then
    even_sum+=$i
  else
    odd_sum+=$i
  fi
  let i++
done

echo -e "even_sum=$even_sum.\todd_sum=$odd_sum."
echo


# until 循环语句写法;

echo "until 循环语句写法计算结果:"


declare -i even_sum=0
declare -i odd_sum=0

declare -i i=1

until [ $i -gt 100 ]; do
  mdo=$[$i%2]
  if [ $mdo -eq 0 ]; then
    even_sum+=$i
  else
    odd_sum+=$i
  fi
  let i++
done

echo -e "even_sum=$even_sum.\todd_sum=$odd_sum."
echo

举例3:创建10个用户,user101-user110;密码同用户名(for循环);

#!/bin/bash
#

for i in {206..210}; do
  id user$i > /dev/null 2>&1 
  if [ $? -eq 0 ]; then
    user$i is already exists.
  else
    useradd user$i && echo "user${i}" | passwd --stdin user$i &> /dev/null
    echo "Add user${i} is finished.password is the same with username."
  fi
done
#!/bin/bash
#

declare -i i=101

while [ $i -le 110 ]; do
  id user$i > /dev/null 2>&1
  if [ $? -eq 0 ]; then
    echo "user$i is already exists."
  else
    useradd user$i && echo "user$i" | passwd --stdin user$i > /dev/null
    echo "Add user$i is finished. password is the same with username."
  fi
  let i++
done
#!/bin/bash
#

declare -i i=101

until [ $i -gt 110 ]; do
  id user$i > /dev/null 2>&1
  if [ $? -eq 0 ]; then
    echo "user$i is already exists."
  else
    useradd user$i && echo "user$i" | passwd --stdin user$i > /dev/null
    echo "Add user$i is finished. password is the same with username."
  fi
  let i++
done

举例4:打印九九乘法表(for循环);
外循环控制乘数,内循环控制被乘数;

#!/bin/bash

for j in {1..100};do
  for i in $(seq 1 $j);do
    echo -e "${i}x${j}=$[${i}*${j}]\t"
  done
  echo
done

打印九九乘法表(while循环);

#!/bin/bash
#

declare -i j=1

while [ $j -le 9 ]; do
    declare -i i=1
        while [ $i -le $j ]; do
                echo -n -e "${i}x${j}=$[$i*$j]\t"
                let i++
        done
        let j++
        echo
done

打印九九乘法表(until循环);

#!/bin/bash
#

declare -i j=1

until [ $j -gt 9 ]; do
    declare -i i=1
        until [ $i -gt $j ]; do
                echo -n -e "${i}x${j}=$[$i*$j]\t"
                let i++
        done
        let j++
        echo
done

 

举例5:逆序打印九九乘法表(for循环);

#!/bin/bash
#

for j in {9..1}; do
  for i in $(seq 1 $j); do
    echo -n -e "${i}x${j}=$[$i*$j]\t"
  done
  echo
done

逆序打印九九乘法表(while循环);

#!/bin/bash
#

declare -i j=9

while [ $j -le 9 ]; do
  if [ $j -lt 1 ]; then
    exit 11
  fi
    declare -i i=1
        while [ $i -le $j ]; do
                echo -n -e "${i}x${j}=$[$i*$j]\t"
                let i++
        done
        let j--
        echo
done

逆序打印九九乘法表(until循环);

#!/bin/bash
#

declare -i j=9

until [ $j -gt 9 ]; do
  if [ $j -lt 1 ]; then
    exit 11
  fi
    declare -i i=1
        until [ $i -gt $j ]; do
                echo -n -e "${i}x${j}=$[$i*$j]\t"
                let i++
        done
        let j--
        echo
done

 

Leave a Reply

Your email address will not be published. Required fields are marked *