1-24-case流程控制和for、while循环语句的使用

2018-07-12  本文已影响0人  秋的懵懂

时间:2018-06-17 姓名:魏文应


一、控制语句 case

语法格式:

case 变量值 in
  模式1)
    执行相应命令,遇到两个分号,退出(两个分号相当于break)
    ;;
  模式2)
     执行相应命令,遇到两个分号,退出(两个分号相当于break)
    ;;
  *)
    缺省,则执行这里的命令。
esac

上面语法中:

比如下面的例子:

#!/bin/bash
clear

echo "*********************"
echo "  1 copy             "
echo "  2 delete           "
echo "  3 backup           "
echo "  4 quit             "

read -p "请输入你的选择:" op
case $op in
        1) echo "your selection is copy."
        ;;
        2) echo "your selection is delete."
        ;;
        3) echo "your selection is backup."
        ;;
        4) echo "your selection is quit."
        ;;
        *) echo "invaild selection"
esac

二、for 循环语句

语法格式:

for 变量 in 名字表
do
命令列表
done

举一个例子:

#!/bin/bash

# 将所需要的变量列举出来
day="sunday monday tuesday wendnesday thursday friday saturday"

# 将day内容依次打印出来。
for x in $day
do
        echo "the day is:$x "
done

再比如:

#!/bin/bash

for i in `seq 9`
do
        echo "num is $i"
done

比如批量创建用户:

#!/bin/bash
ULIST=$(cat ./name.txt)

for UNAME in $ULIST
do
        useradd $UNAME
        echo "123456" | passwd --stdin $UNAME &> /dev/null
done

三、while循环语句

语法格式:

while 条件
do
  命令
done

比如,计算打印1~9的平方:

#!/bin/bash

num=1
while [ $num -lt 10 ]
do
        square=$(expr $num \* $num)
        echo $square
        let num++
done

四、无限循环

可以使用while或者for进行无限循环,有多种方式,比如:

while :
do
  命令
done

或者:

for (( ; ; ))

或者:

while true
do
   命令
done

五、扩展算数运算的方法

使用 (( )) 两个括号的时候,可以扩展shell中的算数运算的使用方法。特点:

echo "这是一个循环例子。"
echo
var1=1
while((var1<100))
do
        echo "它的有效值是:$var1"
        ((var1=var1*2))
done

echo "测试完成"

六、嵌套循环

read -p "请输入你要打印的行数:" line
read -p "请输入你要使用的符号:" char

a=1
while [ $a -le $line ]
do
        b=1
        while [ $b -le $a ]
        do
                echo -n "$char"
                b=`expr $b + 1`
        done
        echo
        a=`expr $a + 1`
done

使用for

#!/bin/bash

read -p "please enter a number :" line

for((i=1;i<=line;i++))
do
        for((j=line-i;j>0;j--))
        do
                echo -n " "
        done
        for((h=1;h<=((2*i-1));h++))
        do
                echo -n "*"
        done
        echo
done

七、跳出循环 break 和 continue 继续

使用 break 跳出循环,使用 continue 继续循环。比如下面的代码:

#!bin/bash

while true
do
        echo "** 输入1,执行break    **"
        echo "** 输入2,执行continue **"
        echo "** 输入其它,继续循环     **"        

        read -p "请输入对应的数字:" num
        case $num in
                1)      echo "执行了break"
                        break
                ;;
                2)      echo  "执行了continue"
                        continue
                ;;
                *)
                ;;
        esac
        
        echo "没有continue的效果。"
done

echo " while循环结束了,执行了break,程序就跑到这运行了。"

下面是嵌套循环加上continue和break 测试

#!/bin/bash

while true
do
        echo 
        echo "**************************"
        echo "**** 1   copy         ****"
        echo "**** 2   delete       ****"
        echo "**** 3   backup       ****"
        echo "**** 4   no continue  ****"
        echo "**** q   quit         ****"
        echo "**************************"
        read -p "please input options: " sum
        case $sum in
                1)      echo "You choice is copy"
                        read -p "from file:" wen1
                        read -p "to file:" wen2
                        if [ -f $wen1 -a -d $wen2 ];then
                                cp $wen1 $wen2
                                ls $wen2
                                echo "copy file success"
                        elif [ -d $wen1 -a -d $wen2 ];then
                                cp -r $wen1 $wen2
                               ls $wen2
                                echo "copy directory success"
                        else
                                echo "Do not change the directory or file"
                                continue
                        fi
                ;;
                2)      echo "you choice is delete"
                        read -p "from file" wen1
                        if [ -f $wen1 ]; then
                                rm -f $wen1
                                ls $wen1
                                echo "delete file success"
                        elif [ -d $wen1 ];then
                                rm -rf $wen1
                                ls $wen1
                                echo "delete directory success"
                        else
                                echo "Do not change the directory or file"
                                continue
                        fi
                ;;
               3)      echo "you choice is bakcup"
                        read -p "from file :" wen1
                        read -p "to file :" wen2
                        cd $wen2 2 > /dev/null
                        if [ -d $wen2 -o -f $wen1 ];then
                                tar -jcvf $wen1.tar.bz2 $wen1
                        else
                                echo "input error"
                                continue
                        fi
                ;;
                4)      echo "test continue"
                ;;
                q)      echo "you choice is to quit"
                        break
                ;;
                *)      echo "please input again "
                        continue
                ;;
        esac
        echo "no continue"
done
上一篇 下一篇

猜你喜欢

热点阅读