for 循环:语句非常适用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况。
则更适合使用另外一种循环——while 语句使用 while 循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行。
1.计算闰年
#!/bin/bash
#功能描述(Description):判断闰年.
#条件1:能被4整除,但不能被100整除;条件2:能被400整除.
#满足条件1或者条件2之一就是闰年.
for i in {1..5000}
do
if [[ $[i%4] -eq 0 && $[i%100] -ne 0 || $[i%400] -eq 0 ]];then
echo "$i:是闰年"
else
echo "$i:非闰年"
fi
done
运行结果
2.猴子吃香蕉问题
功能描述(Description):使用循环计算猴子吃香蕉的问题.
一只猴子第一天从树上摘了若干根香蕉,
当即就吃了一半,还不过瘾,又多吃了一根.
第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉.
依此类推,每天都将剩余的香蕉吃一半后再多吃一根.
到了第九天,猴子发现只剩一根香蕉了,
请问这只猴子在第一天总共摘了多少根香蕉?
初始化香蕉数量为1,也就是第九天香蕉数位1.
每循环一次计算前一天的香蕉数量,循环8次得到第一天的香蕉数量
#!/bin/bash
banana=1
for i in {1..8}
do
banana=$[(banana+1)*2]
done
echo $banana
运行结果
3.验证IFS对循环影响
#!/bin/bash
#功能描述(Description):IFS对循环影响的演示.
#因为使用默认IFS的值,所以按空格为分隔符,X变量有4个值,for循环4次.
echo -e "\033[32m案例1:未自定义IFS,对X="a b c d"循环4次结束.\033[0m"
X="a b c d"
for i in $X
do
echo "I am $i."
done
echo
#备份IFS分隔符
OLD_IFS="$IFS"
#定义分隔符为分号,而X变量的值又没有分号分隔的数据,因此for仅会循环1次.
echo -e "\033[32m案例2:自定义IFS为分号,对X="1 2 3 4"循环1次结束.\033[0m"
IFS=";"
X="1 2 3 4"
for i in $X
do
echo "I am $i."
done
echo
#定义分隔符为分号,X变量的值也使用分号分隔,因此循环了4次,每次循环输出一个名字.
echo -e "\033[32m案例3:自定义IFS为分号,对X='Jacob;Rose;Vicky;Rick'循环4次结束.\033[0m"
IFS=";"
X="Jacob;Rose;Vicky;Rick"
for i in $X
do
echo "I am $i."
done
echo
#定义多个分隔符,X变量的值也使用多个分隔符分隔.
#多个分隔符为或者关系,即使用分号或者句点或者冒号为分隔符.最终循环次数为4次.
echo -e "\033[32m案例4:自定义IFS为:分号|句点|冒号,对X=Jacob;Rose.Vicky:Rick循环4次结束.\033[0m"
IFS=";.:"
X="Jacob;Rose.Vicky:Rick"
for i in $X
do
echo "I am $i."
done
echo
运行结果