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

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

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;

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


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

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LKsTaRt~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值