Shell for、while循环
先顺带说下 if
1. if 条件;then else fi
如果else分支没有执行语句,可以不写。
2. if 条件;then elif 条件;then else fi
#!/bin/bash ## 定义变量,并赋值 a=10 b=20 ## 判断a,b变量的关系 if [ $a -eq $b ];then echo "a 等于 b" elif [ $a -gt $b ];then echo "a 大于 b" else echo "a 小于 b" fi
结果:
for 循环:
语法1:
for 变量 in 列表/数组 ##已空格 分隔符
do
command
done
语法2:
for ((变量;条件;条件))
do
command
done
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/bin/bash ## for 语法1,读取每个单词 ,注意不能使用引号(加上引号,就会默认是一个单词) for str in This is kimbo speaking do echo "The str is : ${str}" done ## for 语法2,注意使用两个小括号 for (( i=1; i<=3; i++ )) do echo "The i is: $i" done ## for 语法3 for j in `seq 1 3` do echo "The j is: $j" done ## for 语法4 for k in {1..3} do echo "The k is: $k" done ## for 循环数组 ##定义数组 db_arr=(0 1 2 3 4 5 6 7 8 9 a b c d e f) for var_db in ${db_arr[@]} ##循环取数据内容,默认从0开始 do echo "var_db is ${var_db}" ##打印变量 done
结果:
while 循环:
语法1:
while [条件]
do
command
done
语法2:
while (())
do
command
done
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/bin/bash ## 定义变量 a=1 b=5 ## while 语法1: while [ $a -le $b ] do echo "语法1:The a is :$a" a=`expr $a + 1` done ## while 语法2: while (( $a >= $b )) do echo "语法2:The a is :$a" a=`expr $a - 1` done
循环控制语句:
break : 不执行当前循环体内break下面的语句,从当前循环退出
continue : 不执行当前循环体内continue下面的语句,从循环开头 继续执行
###########while 逐行读取文件内容
方法1:
cat ${file_name} | while read line
do
echo $line
done
方法2: 此方法可以获取循环内的变量,方法1不行。
while read line
do
echo $line
done <${file_name}
小例子:用于日常补数据,非常实用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#!/bin/bash ## 参数校验 if [ $# -ne 2 ];then echo "Please Enter two parameter,try again." echo "example: 20170201 20170207" exit 1 fi ## 定义目录 dir=/home/test ## 定义变量,开始日期、结束日期 s_date=`date -d "$1" +%Y%m%d` e_date=`date -d "$2" +%Y%m%d` ## 打印变量 echo "循环开始日期 is ${s_date}--->" echo "循环结束日期 is ${e_date}--->" ## while 循环 while (( ${s_date} <= ${e_date} )) do echo "当前运行日期:${s_date}" ## 运行补数脚本 ##sh ${dir}/kimbo_test.sh ${s_date} >>$dir/run.log ## 运行日期加1天 s_date=`date -d "+1 day ${s_date}" +%Y%m%d` done
结果:
-------> by kimbo_zhang