Shell循环控制与递归查找

循环控制

重复的执行某些操作

实例1:打印1-100中的奇数

# !/bin/bash
for var in `seq 1 2 100`    #seq 提供一个数值区间  `shell命令`
do 
	printf "$var "          #打印单个数字不换行
done

结果图:
Shell循环控制与递归查找
实例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

结果图:
Shell循环控制与递归查找
实例3:打印下图所示三角形
Shell循环控制与递归查找

# !/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

结果图:
Shell循环控制与递归查找

递归查找

自己调用自己

实例:通过递归查找某路径下的所有子孙文件

# !/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				#制定参数

结果图:查找工作目录下的所有子孙文件
Shell循环控制与递归查找

[注]:seq与expr 的详细用法可以调用man手册查询