一、循环控制及状态返回值
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语句的脚本实例:
#!/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语句,所以没有跳出循环,依然执行下面的语句。
二、shell的函数
1、语法
#定义函数方法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
2、实例
注意:函数需要在调用之前被定义;
#!/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;
3、函数的返回值return
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;
$?获取上一个命令的执行状态返回值;文章来源:https://www.toymoban.com/news/detail-756103.html
return 返回值取值范围0-255;如果超过了这个范围,会随机产生一个返回值;文章来源地址https://www.toymoban.com/news/detail-756103.html
到了这里,关于【Linux】shell编程4(break语句、continue、exit、shell的函数、返回值return)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!