除了上述的方法之外,for 回圈还有另外一种写法!语法如下:
for (( 初始值;限制值;运行步阶))
do
程序段
done
这种语法适合於数值方式的运算当中,在 for 后面的括号内的三串内容意义为:
- 初始值:某个变量在回圈当中的起始值,直接以类似 i=1 配置好;
- 限制值:当变量的值在这个限制值的范围内,就继续进行回圈。例如 i<=100;
- 运行步阶:每作一次回圈时,变量的变化量。例如 i=i+1。
值得注意的是,在『运行步阶』的配置上,如果每次添加 1 ,则可以使用类似『i++』的方式,亦即是 i 每次回圈都会添加一的意思。好,我们以这种方式来进行 1 累加到使用者输入的回圈吧!
#!/bin/bash
#Try do calculate 1+2+....+${your_input}
read -p "Please input a number, I will count for 1+2+...+your_input: " nu
s=0
for (( i=0; i<=$nu; i=i+1))
do
s=$(($s+$i))
done
echo "The result of '1+2+3+...+$nu' is ==> $s"
执行结果:
[oracle@99bill-as9 zy]$ sh calc.sh
Please input a number, I will count for 1+2+...+your_input: 99
The result of '1+2+3+...+99' is ==> 4950
案例:
echo "--------------------------------- Instance Status for Tomcat ------------------------------------"
cd $deploy_home
IFS=$'\n'
for app_listin `cat result.list| grep -w console`
do
app_ip=`echo $app_list | awk '{print $1}'`
echo "sh status.sh $app_ip"
echo “The length is ${#app_list[@]}”
done
echo
这里其实还是利用了数组的特点,如果你想要输出全部,则echo “app_list is ${app_list[@]}”,但是如果你要是输出app_list的长度,你会发现和你想想的结果不一样,它的结果是1,知道为何吗,我们来看一下测试结果:
PS:
for i in `seq 1 10`; do echo $i; done
for ((i=1; i<=10; i++)); do echo $i; done
再来看一个例子:
for app_list in `cat result.list | grep -w $product_war_name`
do
app_ip=`echo $app_list | awk '{print $1}'`
instance_name=`echo $app_list | awk '{print $3}'| sed -e 's#.*/\(.*\)\/webapps.*#\1#'`
app_name=`echo $app_list | awk '{print $2}'`
echo "sh deploy.sh $app_ip $instance_name $app_name $pack_home/$pack_path"
done
需要说明的是『grep 在数据中查寻一个字串时,是以 "整行"为单位来进行数据的撷取的!』
所以上面的$app_list代表的是一整行的内容,我们就可以找出对应的信息了,O(∩_∩)O哈哈~