Shell循环控制与递归查找
循环控制
重复的执行某些操作
实例1:打印1-100中的奇数
# !/bin/bash
for var in `seq 1 2 100` #seq 提供一个数值区间 `shell命令`
do
printf "$var " #打印单个数字不换行
done
结果图:
实例2:在1的基础上每十个数换行
# !/bin/bash
count=0 #定义一个计数器
for var in `seq 1 2 100`
do
printf "$var "
count=`expr $count + 1` #expr 提供数值的计算 = - * / % 每打印一个count+1
num=`expr $count % 10` #判断是否输出了10 个数字
if test $num -eq 0
then
printf "\n" #转义字符 \n换行
fi
done
结果图:
实例3:打印下图所示三角形
# !/bin/bash
x=1
for (( i=4;i>=0;i-- )) # (( 数学表达式 )) 表达方式与Java相似
do #第一层循环
for (( k=0;k<i;k++ )) #输出星星前面的空格
do
printf " " #打印空格
done
for(( j=0;j<x;j++ )) #打印星星个数,下一行比上一行多2
do
printf '*' #打印星星
done
x=`expr ${x} + 2 `
printf "\n" #打印完一行后换行
done
结果图:
递归查找
自己调用自己
实例:通过递归查找某路径下的所有子孙文件
# !/bin/bash
function viewf(){ #定义一个方法
files=`ls $1` #获取文件列表
cd $1 #进入文件
for f in $files #获取子文件列表
do
if test -d $f #判断是否是文件夹
then
echo "$f是文件夹"
viewf $f #是文件夹则调用自己循环往下一级目录查找
else
echo "$f" #不是文件夹则输出文件名
fi
done
cd ../ #返回上一级文件夹
}
read -p "路径:" path #输入查找的路径
viewf $path #制定参数
结果图:查找工作目录下的所有子孙文件
[注]:seq与expr 的详细用法可以调用man手册查询