控制流之case/for/while

来源:互联网 发布:淘宝 微信 短网址 编辑:程序博客网 时间:2024/06/01 14:34

case语句

 

       下面是要学习的多重选择模式,由于本人是干c语言的,所以经常和C语言中的语法比较。Caseswitch语法基本是一样的。

       结构如下:

              Case  in

                     模式1)命令1

                                   命令2

                                   …..

                                   ;;

                     模式2)命令3

                                   …..

                                   ;;

              Esec

举一个简单的例子:

根据脚本输入的参数(限定第一个参数)打印不同的说明,或命令

#!/bin/sh

PARPAM=$1

if [ "$PARPAM" = "" ]

then

echo "no parpam"

exit 1

fi

case $PARPAM in

1) echo "param is : $1"

;;

2) echo "param is : $1"

;;

*) ls -l

;;

esac

 

case 还有个用处就是屏蔽你不想要的,比如你只对0-9数字中9操作,则0-8可以case中什么也不做,1);;2);;类似这样。

 

For循环

    Shell的for循环好像要比C语言的强大,基本格式如下:

    For 变量名 in 列表

    Do

        命令1

        命令2

        ……

    Done

变量名和类表有很多,比如ls中出现的各个文件集合就可以看作列表,变量名就是每个文件

比如:

for loop in 1 2 3 4 5

do

    echo $loop

done

或者

for loop in `ls`

do

    echo $loop

done

当然for循环可以嵌套

for 变量名1  in 列表1

do

       for 变量名2  in  列表2

       do

       命令1

       done

done

 

while循环

格式:

while  命令

do

       命令1

       命令2

       .。。。。

done

当命令成立时,运行12.。。。。。知道命令不成立,和C语言一致。

很好懂,给个例子。

文件 test.txt内容为:

jim spike1A

xiao li: 2: B

li ming: 3:C

程序:

BACK=IFS

echo "$IFS"

IFS=:

echo "$IFS"

while read NAME NUM WORD

do

    echo -e "$NAME/t $NUM/t $WORD"

done < test.txt

IFS=$BACK

#IFS表示分割符,默认是空格,由于我的txt是冒号分割所以改了,然后恢复

当然还有跳出循环的break和continue的用法和C语言一样,不再重复。

 

另外 冒号(:)表示什么也不做,比如else : 表示else语句后什么也不做

菜单显示可以不用好多echo语句比如

1.one

2.    two

3.    three

可以这样

cat << MYDATA

1.       one

2.       two

3.       three

MYDATA

就能显示了