当前位置:   article > 正文

【Linux】shell编程4(break语句、continue、exit、shell的函数、返回值return)_linux break

linux break

一、循环控制及状态返回值

1、 break

break语句用于从for、while、until或select循环中退出、停止循环的执行。

语法:

break [n]
  • n代表嵌套循环的层级,如果指定了n,break将退出n级嵌套循环。

  • 如果没有指定n或n小于 1,则退出状态码为0,否则退出状态码为n。

  • 一句话总结:跳出当前循环

2、continue

continue语句用于跳过循环体中剩余的命令直接跳转到循环体的顶部,而重新开始循环的下一次重 复。

continue语句可以应用于for、while或until循环。

语法:

continue [n]
  • 一句话总结:跳到当前循环体顶部,重新开始循环

3、exit

exit退出目前的shell,执行exit可使shell以指定的状态值退出。

若不设置状态值参数,则shell以预 设值退出。状态值0代表执行成功,其他值代表执行失败。

exit也可用在script,离开正在执script, 回到shell。

一句话总结:和break类似类似,不过breal是退出循环,exit是退出脚本

4、实例

(1)下面我们来看一个使用break语句的脚本实例:

  1. #!/bin/bash
  2. #如果未指定参数,则打印脚本的使用方法,并返回退出状态码1
  3. [ $# -eq 0 ] && { echo "Usage: $0 command"; exit 1; }
  4. #将位置参数1的值赋给变量match
  5. match=$1
  6. found=0
  7. for dir in /bin /usr/bin
  8. do
  9. #遍历目录下的所有文件
  10. for file in $dir/*
  11. do
  12. #如果文件名与指定的参数文件名相匹配,则打印命令已找到,并退出嵌套的for循
  13. if [ $(basename $file) == "$match" ]
  14. then
  15. echo "The command $match was found in $dir directory"
  16. found=1
  17. #退出for循环
  18. break
  19. fi
  20. done
  21. done
  22. [ $found -ne 1 ] && echo "The command $match not found."

(2)再来看一个使用break n语句退出嵌套循环的脚本实例:

  1. #!/bin/bash
  2. #如果未指定参数,则打印脚本的使用方法,并返回退出状态码1
  3. [ $# -eq 0 ] && { echo "Usage: $0 command"; exit 1; }
  4. #将位置参数1的值赋给变量match
  5. match=$1
  6. found=0
  7. for dir in /bin /usr/bin
  8. do
  9. #遍历目录下的所有文件
  10. for file in $dir/*
  11. do
  12. #如果文件名与指定的参数文件名相匹配,则打印命令已找到,并退出嵌套的for循
  13. if [ $(basename $file) == "$match" ]
  14. then
  15. echo "The command $match was found in $dir directory"
  16. found=1
  17. #退出两层的for循环
  18. break 2
  19. fi
  20. done
  21. done
  22. [ $found -ne 1 ] && echo "The command $match not found."

(2)和(1)的区别在于:

  • (2)退出了第二层循环,包含break语句的为第一层循环,最外围的for循环为第二层循环;因此在第二层循环时它只在/bin下寻找了是否有ls;

  • (1)只退出了第一层循环,因此它会在/bin /usr/bin都找是否有ls;


(3)break跳出单个循环

  1. #!/bin/bash
  2. for var1 in 1 2 3 4 5 6 7 8 9 10
  3. do
  4.     if [ $var1 -eq 5 ]
  5.     then
  6.         break
  7.     fi
  8.         echo "Iteration number: $var1"
  9. done
  10.     echo "The for loop is completed“

(4)来看一个在循环中使用continue语句的脚本实例:

  1. #!/bin/bash
  2. #如果运行脚本时未指定参数,则打印脚本的使用方法,并返回退出状态码1
  3. [ $# -eq 0 ] && { echo "Usage: $0 directory"; exit 1; }
  4. #如果指定的目录不存在,则打印错误信息,并返回退出状态码1
  5. [ ! -d $1 ] && { echo "Error: The directory $1 does not exist."; exit 1; }
  6. #如果没有成功切换到指定的目录,则打印相应的错误信息,并返回退出状态码1
  7. cd $1 || { echo "Connot cd to the directory $1"; exit 1; }
  8. #遍历指定目录下的所有文件
  9. for filename in $(ls)
  10. do
  11. #如果文件名不包含大写字母,则直接跳转到下一次循环
  12.     if [ $filename != *[[:upper:]]* ]
  13.     then
  14.     #忽略for循环体中剩余的语句直接跳转到下一次循环
  15.     continue
  16.     fi
  17.     #将变量filename中的字母转换为小写
  18.     new='echo $filename | tr 'A-Z' 'a-z''
  19.     #将文件重命名
  20.     mv $filename $new
  21.     echo "The file $filename renamed to $new."
  22. done
  • 执行了continue,他就从for循环里跳出了,如果指定的目录里有包含大写字母的文件,那他就会转换成小写字母。

  • 他能转换成小写是它就没进if fi语句,所以没有跳出循环,依然执行下面的语句。

二、shell的函数

1、语法

  1. #定义函数方法1
  2. function function_name()
  3. {
  4. commands;commands;commands
  5. .....
  6. }
  7. #定义函数方法2
  8. function function_name #如果有function关键字 可以省略()
  9. {
  10. commands;commands;commands
  11. .....
  12. }
  13. #定义函数方法3,可以省去关键字function
  14. function_name()
  15. {
  16. commands;commands;commands
  17. ........
  18. }
  19. #调用函数,直接写出函数名
  20. function_name
  21. #传参数
  22. function_name parameter1 parameter2 parameter3

2、实例

注意:函数需要在调用之前被定义;

  1. #!/bin/bash
  2. function funct1()
  3. {
  4. echo "This is $n times!"
  5. }
  6. n=1
  7. while [ $n -le 5 ]
  8. do
  9. funct1
  10. n=$(($n+1))
  11. done
  12. echo "This is end"
  13. funct1
  14. echo "Bye~"

  1. #!/bin/bash
  2. function funct1()
  3. {
  4. echo "This is $n times!"
  5. }
  6. function funct1()
  7. {
  8. echo "This is $n loop!"
  9. }
  10. n=1
  11. while [ $n -le 5 ]
  12. do
  13. funct1
  14. n=$(($n+1))
  15. done
  16. echo "This is end"
  17. funct1
  18. echo "Bye~"

函数可以被覆盖,例如上面的例子,前后一共定义了两个funct1,但是调用的时候就只调用了最新定义的funct1;

3、函数的返回值return

return是不会被显示出来的;

  1. #!/bin/bash
  2. funct1()
  3. {
  4. read -p "请输入一个数:" num
  5. echo "这个数的2倍是多少呢?"
  6. return $(($num*2))
  7. }
  8. funct1
  9. echo "这个数的返回值是:$?"
  1. #!/bin/bash
  2. funct1()
  3. {
  4. read -p "请输入一个数:" num
  5. echo "这个数的2倍是多少呢?"
  6. }
  7. funct1
  8. echo "这个数的返回值是:$?"

如果没有设置return的值,那它就返回函数正常执行的返回值0;

$?获取上一个命令的执行状态返回值;


return 返回值取值范围0-255;如果超过了这个范围,会随机产生一个返回值;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/676254
推荐阅读
相关标签
  

闽ICP备14008679号