Linux入门第五天——shell脚本入门(下)基础语法之循环

一、循环

  1.不定循环

  有两种形式:

while [ condition ] <==中括号内的状态就是判断式
do <==do 是循环的开始!
程序段落
done <==done 是循环的结束

  当 condition 条件成立时,就进行循环,直
   到 condition 的条件不成立才停止

until [ condition ]
do
程序段落
done

  当 condition 条件成立时,就终止循环, 否则就持续
  进行循环的程序段。

  示例

#!/bin/bash
#描述:循环练习1
#作者:jiangbei on 2017/12/15
until [ "${yes}" == "yes" -o "${yes}" == "YES" ]
do
        read -p "input yes/YES:" yes
done
echo "OK,you input the right word!"

   示例:1+2+3+...+10的累加:

 1 #!/bin/bash
 2 #简介略
 3 ##########
 4 declare i=1
 5 declare sum=0
 6 while [ ${i} -le 10 ]
 7 do
 8         sum=$((${sum}+${i}))
 9         i=$((${i}+1))
10 done
11 echo "the total is ${sum}"

  // 第一次把第8行的sum写成num,纠结了半天变量的写法,囧。更多的数值计算,参考http://www.mamicode.com/info-detail-1324934.html

  注意:同样,x权限添加等此处省略...(中括号的左右空格请注意!)

  2.固定循环

  与经典的for循环类似,此处不再赘述

  列举值循环:

  语法:

for var in con1 con2 con3 ...
do
程序段
done

  1. 第一次循环时, $var 的内容为 con1 ;
  2. 第二次循环时, $var 的内容为 con2 ;
  3. 第三次循环时, $var 的内容为 con3 ;

  示例:

#!/bin/bash
#略
for animal in dog cat horse
do
        echo "The current animal is ${animal}"
done

  

  数字式循环:

  使用seq——seq 为 sequence(连续) 的缩写之意,更多seq相关的用法(可以使用反引号`seq 1000`,或者$( seq 1000 )),

  参考http://linux.51yip.com/search/seq

  利用数字式改写累加示例如下:

#!/bin/bash
#略
declare -i sum=0
for i in $(seq 100)
do
        sum=$((${sum}+${i}))
done
echo "the total is ${sum}"

  当然,还有另外一种写法:{1..100},这是bash内置的写法,并且支持{a..g}表示a到g及中间的字母!

   最后,采用循环+判断的写法如下:

  最后,让我们来玩判断式加上循环的功能!我想要让使用者输入某个目录文件名, 然后我找
  出某目录内的文件名的权限,该如何是好?呵呵!可以这样做啦~

#!/bin/bash
#略
read -p "Please input a directory:" dir
if [ "${dir}" == "" -o ! -d "${dir}" ];then
        echo "The ${dir} is not exist!"
        exit 1
fi
filelist=$(ls ${dir})
for file in ${filelist}
do
        perm=""
        test -r "${dir}/${file}" && perm="${perm}r"
        test -w "${dir}/${file}" && perm="${perm}w"
        test -x "${dir}/${file}" && perm="${perm}x"
        echo "the file ${dir}/${file} has the perm:${perm}"
done

  输入/tmp就可以测试啦!

   数值处理的循环:——熟悉的格式

for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done

   继续改写累加的示例:

#!/bin/bash
#略
declare -i sum=0
for (( i=1; i<=100; i++))
do
        sum=$((${sum}+${i}))
done
echo "the total is ${sum}"

   再举一个数组的例子(数据类型介绍参考基本概念随笔)

#!/bin/bash
#略
#定义数组
list[1]="糖醋排骨"
list[2]="麻婆豆腐"
list[3]="宫保鸡丁"
size=3
check=$((${RANDOM} * ${size} / 32767 + 1))
echo "your choice is ${list[${check}]}"

 // shell有一个环境变量RANDOM,范围是0--32767

原文地址:https://www.cnblogs.com/jiangbei/p/8044842.html