美文网首页
1-24-case流程控制和for、while循环语句的使用

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

作者: 秋的懵懂 | 来源:发表于2018-07-12 10:49 被阅读0次

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


    一、控制语句 case

    语法格式:

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

    上面语法中:

    • 变量值后面必须为in。
    • 每一个匹配模式,以英文右括号结束 )
    • 匹配到模式后,遇到 ;; 结束case语句。
    • esac 表示case语句结束。

    比如下面的例子:

    #!/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中的算数运算的使用方法。特点:

    • 在两个括号中,运算可以像C语言一样,比如:a++b--a=a+1等表达式是可用的。
    • 括号内使用变量,可以不使用 $ 符号前缀。
    • 可以进行 逻辑运算四则运算
    • 双括号结构,扩展了 for、while、if 条件测试运算。
    • 支持多个表达式运算,各个表达式之间用 分号分开
    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 继续循环。比如下面的代码:

    • 执行break,while循环就从 break处,跳出当前循环,执行 done后面 的语句。
    • 执行continue,while循环就从 continue处,回到 while 处 继续执行。
    #!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
    

    相关文章

      网友评论

          本文标题:1-24-case流程控制和for、while循环语句的使用

          本文链接:https://www.haomeiwen.com/subject/timweftx.html