• shell--while循环


    1.基本语法

    1. while [ 条件表达式 ]
    2. do
    3. 语句
    4. 语句
    5. done

    示例:循环输出 1~10这几个数

    1. [root@openEuler ~]# cat while1.sh
    2. #!/bin/bash
    3. i=1
    4. while [ $i -le 10 ]
    5. do
    6. echo $i
    7. let i++
    8. done

    示例:使用 exec 读取指定文件的内容并循环输出。

    1. # 第一步创建文件及内容
    2. [root@openEuler ~]# cat > myfile << EOF
    3. > open
    4. > openlab
    5. > openlab123
    6. > linux
    7. > readhat
    8. > EOF
    9. [root@openEuler ~]# cat myfile
    10. open
    11. openlab
    12. openlab123
    13. linux
    14. readhat
    15. # 第二步:编写脚本来实现文件读取并循环输出
    16. [root@openEuler ~]# cat while2.sh
    17. #!/bin/bash
    18. exec < myfile
    19. while read line
    20. do
    21. echo $line
    22. done
    23. [root@openEuler ~]# bash while2.sh
    24. open
    25. openlab
    26. openlab123
    27. linux
    28. readhat

    使用另一种方式来读取文件

    1. [root@openEuler ~]# cat while3.sh
    2. #!/bin/bash
    3. while read line
    4. do
    5. echo $line
    6. done < myfile
    7. [root@openEuler ~]# bash while3.sh
    8. open
    9. openlab
    10. openlab123
    11. linux
    12. readhat

    2.无限循环

    在 while 的表达式中,可以指定以下几个特殊值:

    • true 它会一直循环,而且它的状态返码是 0

    • false 它不做任何事,表示成功,状态码为 0

    • : 它的作用与 true 相同,都是进行无限循环

    示例:

    1. [root@openEuler ~]# while true ; do echo 123123 ; done #会一直循环
    2. [root@openEuler ~]# while false ; do echo 123123 ; done
    3. [root@openEuler ~]# echo $?
    4. 0
    5. [root@openEuler ~]# while : ; do echo 123123 ; done

    3.使用示例

    1. [root@openEuler ~]# cat while4.sh
    2. #!/bin/bash
    3. price=$[ $RANDOM % 100 ]
    4. time=0
    5. while true
    6. do
    7. read -p 'Please enter product price [0-99]: ' input
    8. let time++
    9. if [ $input -eq $price ]; then
    10. echo 'Good luck, you guessed it.'
    11. echo 'You have guessed $time times.'
    12. exit 0
    13. elif [ $input -gt $price ]; then
    14. echo "$input is to high"
    15. else
    16. echo "$input is to low"
    17. fi
    18. if [ $time -eq 5 ]; then
    19. echo "You have guessed is 5 times. exit"
    20. exit 1
    21. fi
    22. done
    23. [root@openEuler ~]# bash while4.sh
    24. Please enter product price [0-99]: 50
    25. 50 is to low
    26. Please enter product price [0-99]: 80
    27. 80 is to high
    28. Please enter product price [0-99]: 70
    29. 70 is to high
    30. Please enter product price [0-99]: 60
    31. 60 is to low
    32. Please enter product price [0-99]: 65
    33. 65 is to low
    34. You have guessed is 5 times. exit
    35. [root@openEuler ~]#

    示例:使用while读取文件

    1. # 1. 创建文件
    2. [root@openEuler ~]# cat ips
    3. 192.168.72.131 22
    4. 192.168.72.132 23
    5. 192.168.72.133 22
    6. # 2. 编写脚本
    7. [root@openEuler ~]# cat while6.sh
    8. #!/bin/bash
    9. while read line
    10. do
    11. IP=`echo $line|cut -d" " -f1` # 也可以使用awk来实现,如:IP=`echo $line|awk '{print $1}'`
    12. PORT=$(echo $line|cut -d " " -f 2)
    13. echo "IP:$IP, PORT:${PORT}"
    14. done < ips
    15. # 3. 运行测试
    16. [root@openEuler ~]# bash while6.sh
    17. IP:192.168.72.131, PORT:22
    18. IP:192.168.72.132, PORT:23
    19. IP:192.168.72.133, PORT:22

  • 相关阅读:
    Vim的基础操作
    QuartzDataSourceScriptDatabaseInitializer Unable to detect database type
    蓝牙协议栈分层
    通过v_COURSE和V_grade查看期末平均成绩在60分以上的课程名称
    基于Java毕业设计大学生兼职平台源码+系统+mysql+lw文档+部署软件
    ElasticSearch之搜索词提示Sug
    智能监控技术助力山林生态养鸡:打造智慧安全的养殖新模式
    【原创】java+swing+mysql校园零食商城设计与实现
    基于Python文本内容/情感的对微博文本自动二元分类
    动态规划算法
  • 原文地址:https://blog.csdn.net/wengedeid/article/details/138037330