赞
踩
break语句用于从for、while、until或select循环中退出、停止循环的执行。
语法:
break [n]
n代表嵌套循环的层级,如果指定了n,break将退出n级嵌套循环。
如果没有指定n或n小于 1,则退出状态码为0,否则退出状态码为n。
一句话总结:跳出当前循环
continue语句用于跳过循环体中剩余的命令直接跳转到循环体的顶部,而重新开始循环的下一次重 复。
continue语句可以应用于for、while或until循环。
语法:
continue [n]
一句话总结:跳到当前循环体顶部,重新开始循环
exit退出目前的shell,执行exit可使shell以指定的状态值退出。
若不设置状态值参数,则shell以预 设值退出。状态值0代表执行成功,其他值代表执行失败。
exit也可用在script,离开正在执script, 回到shell。
一句话总结:和break类似类似,不过breal是退出循环,exit是退出脚本
(1)下面我们来看一个使用break语句的脚本实例:
- #!/bin/bash
- #如果未指定参数,则打印脚本的使用方法,并返回退出状态码1
- [ $# -eq 0 ] && { echo "Usage: $0 command"; exit 1; }
- #将位置参数1的值赋给变量match
- match=$1
- found=0
- for dir in /bin /usr/bin
- do
- #遍历目录下的所有文件
- for file in $dir/*
- do
- #如果文件名与指定的参数文件名相匹配,则打印命令已找到,并退出嵌套的for循
- 环
- if [ $(basename $file) == "$match" ]
- then
- echo "The command $match was found in $dir directory"
- found=1
- #退出for循环
- break
- fi
- done
- done
- [ $found -ne 1 ] && echo "The command $match not found."
(2)再来看一个使用break n语句退出嵌套循环的脚本实例:
- #!/bin/bash
- #如果未指定参数,则打印脚本的使用方法,并返回退出状态码1
- [ $# -eq 0 ] && { echo "Usage: $0 command"; exit 1; }
- #将位置参数1的值赋给变量match
- match=$1
- found=0
- for dir in /bin /usr/bin
- do
- #遍历目录下的所有文件
- for file in $dir/*
- do
- #如果文件名与指定的参数文件名相匹配,则打印命令已找到,并退出嵌套的for循
- 环
- if [ $(basename $file) == "$match" ]
- then
- echo "The command $match was found in $dir directory"
- found=1
- #退出两层的for循环
- break 2
- fi
- done
- done
- [ $found -ne 1 ] && echo "The command $match not found."
(2)和(1)的区别在于:
(2)退出了第二层循环,包含break语句的为第一层循环,最外围的for循环为第二层循环;因此在第二层循环时它只在/bin下寻找了是否有ls;
(1)只退出了第一层循环,因此它会在/bin /usr/bin都找是否有ls;
(3)break跳出单个循环
- #!/bin/bash
- for var1 in 1 2 3 4 5 6 7 8 9 10
- do
- if [ $var1 -eq 5 ]
- then
- break
- fi
- echo "Iteration number: $var1"
- done
- echo "The for loop is completed“
(4)来看一个在循环中使用continue语句的脚本实例:
- #!/bin/bash
- #如果运行脚本时未指定参数,则打印脚本的使用方法,并返回退出状态码1
- [ $# -eq 0 ] && { echo "Usage: $0 directory"; exit 1; }
- #如果指定的目录不存在,则打印错误信息,并返回退出状态码1
- [ ! -d $1 ] && { echo "Error: The directory $1 does not exist."; exit 1; }
- #如果没有成功切换到指定的目录,则打印相应的错误信息,并返回退出状态码1
- cd $1 || { echo "Connot cd to the directory $1"; exit 1; }
- #遍历指定目录下的所有文件
- for filename in $(ls)
- do
- #如果文件名不包含大写字母,则直接跳转到下一次循环
- if [ $filename != *[[:upper:]]* ]
- then
- #忽略for循环体中剩余的语句直接跳转到下一次循环
- continue
- fi
- #将变量filename中的字母转换为小写
- new='echo $filename | tr 'A-Z' 'a-z''
- #将文件重命名
- mv $filename $new
- echo "The file $filename renamed to $new."
- done
执行了continue,他就从for循环里跳出了,如果指定的目录里有包含大写字母的文件,那他就会转换成小写字母。
他能转换成小写是它就没进if fi语句,所以没有跳出循环,依然执行下面的语句。
- #定义函数方法1
- function function_name()
- {
- commands;commands;commands
- .....
- }
-
-
- #定义函数方法2
- function function_name #如果有function关键字 可以省略()
- {
- commands;commands;commands
- .....
- }
-
-
- #定义函数方法3,可以省去关键字function
- function_name()
- {
- commands;commands;commands
- ........
- }
-
- #调用函数,直接写出函数名
- function_name
- #传参数
- function_name parameter1 parameter2 parameter3
注意:函数需要在调用之前被定义;
- #!/bin/bash
-
- function funct1()
- {
- echo "This is $n times!"
- }
-
- n=1
- while [ $n -le 5 ]
- do
- funct1
- n=$(($n+1))
- done
- echo "This is end"
- funct1
- echo "Bye~"
- #!/bin/bash
-
- function funct1()
- {
- echo "This is $n times!"
-
- }
-
- function funct1()
- {
- echo "This is $n loop!"
- }
-
- n=1
- while [ $n -le 5 ]
- do
- funct1
- n=$(($n+1))
- done
- echo "This is end"
- funct1
- echo "Bye~"
函数可以被覆盖,例如上面的例子,前后一共定义了两个funct1,但是调用的时候就只调用了最新定义的funct1;
return是不会被显示出来的;
- #!/bin/bash
-
- funct1()
- {
- read -p "请输入一个数:" num
- echo "这个数的2倍是多少呢?"
- return $(($num*2))
- }
-
- funct1
- echo "这个数的返回值是:$?"
- #!/bin/bash
-
- funct1()
- {
- read -p "请输入一个数:" num
- echo "这个数的2倍是多少呢?"
- }
-
- funct1
- echo "这个数的返回值是:$?"
-
如果没有设置return的值,那它就返回函数正常执行的返回值0;
$?获取上一个命令的执行状态返回值;
return 返回值取值范围0-255;如果超过了这个范围,会随机产生一个返回值;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。