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