shell 中的流程控制语句

一、条件判断

格式:

if [ 条件判断式一 ]; then
     	当条件判断式一成立时,可以进行的命令工作内容;
elif [ 条件判断式二 ]; then
     	当条件判断式二成立时,可以进行的命令工作内容;
else
     	当条件判断式一与二均不成立时,可以进行的命令工作内容;
fi

举例:

read -p "Please input (Y/N): " yn
if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
     	echo "OK, continue"
elif [ "$yn" == "N" ] || [ "$yn" == "n" ]; then
    	echo "Oh, interrupt!"
else
    	echo "I don't know what your choice is"
fi

二、case 条件判断

case  $变量名称 in   #关键字为 case ,还有变量前有钱字号
   "第一个变量内容")  #每个变量内容建议用双引号括起来,关键字则为小括号 )
   #	程序段
	;;                  #每个类别结尾使用两个连续的分号来处理!
  "第二个变量内容")
   #	程序段
	;;
  *)                #最后一个变量内容都会用 * 来代表所有其他值
   	#程序段
	;;
esac                # 最终的 case 结尾!『反过来写』思考一下!

举例:

case $1 in
  "hello")
      	echo "Hello, how are you ?"
	;;
  "")
      	echo "You MUST input parameters, ex> {$0 someword}"
	;;
  *)   # 其实就相当於万用字节,0~无穷多个任意字节之意!
     	echo "Usage $0 {hello}"
	;;
esac

三、循环

1、while…do…done

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

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

举例说明:

s=0  # 这是加总的数值变量
i=0  # 这是累计的数值,亦即是 1, 2, 3....
while [ "$i" != "100" ]
do
     	i=$(($i+1))   # 每次 i 都会添加 1 
     	s=$(($s+$i))  # 每次都会加总一次!
done

2、until…do…done

当 condition 条件成立时,就终止循环,否则循环持续进行.

until[ condition ]
do             
	    程序段落
done

举例说明:

until [ "$yn" == "yes" -o "$yn" == "YES" ]
do
    	read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."

3、for… in …do… done

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

举例说明:

filelist=$(ls $dir)        # 列出所有在该目录下的文件名称
for filename in $filelist
do
     	perm=""
     	test -r "$dir/$filename" && perm="$perm readable"
     	test -w "$dir/$filename" && perm="$perm writable"
     	test -x "$dir/$filename" && perm="$perm executable"
     	echo "The file $dir/$filename's permission is $perm "
done

4、for…do…done

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

举例说明:

read -p "Please input a number, I will count for 1+2+...+your_input: " nu
s=0
for (( i=1; i<=$nu; i=i+1 ))
do
    	s=$(($s+$i))
done

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>