Linux shell编程特殊的场景

本文深入解析Bash脚本中的循环控制语句,包括break、continue、exit与return的功能与应用场景,以及while循环的特殊用法。通过具体实例,帮助读者掌握Bash脚本的流程控制技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、结束标示的总结

(1)break

          特点:跳出整个循环;如果多层循环整个循环下有代码则继续向下执行,执行完之后则跑到上一层循环(下一次)!

#!/bin/bash
# Filename: break.sh
# Describe: 计算[0,10]之间的偶数和,主要是为了说明break!
# 说明:两层for循环

#计数的总和
sum=0
for ((i=0; i<=10; i++))
 do
     for ((j=0; j<=10; j++))
       do
          #奇数则break退出!
            if ((i%2==1));then
               break          #跳出当前整个for循环,继续向下执行!
               echo -e "${j}" #此处永远没有输出!
            fi
            echo -e "j:${j}"  #i是奇数时此有输出!
       done  
#==========一旦break就从此向下执行=========================>
   #echo -e "i:${i}"
   ((sum+=i))#求和!
 done
echo -e "0+1+2+..10 ==>${sum}"

(2)continue

          特点:表示跳出本次循环,当前循环之后(continue)语句不再执行!

#!/bin/bash
# Filename: 案例2.sh
# Describe: [1,10]之间的奇数和,仅仅是为了说明continue

read -p "Please input number:" number
sum=0;
for ((i=0; i<=${number}; i++))
  do
    if ((i%2==0));then
       #跳出当前循环,当前循环其后的代码不再执行!
       continue
    fi
    ((sum+=i))
  done
echo -e "sum==>${sum}"

(3)exit

          特点:自定义退出标识,exit命令用于退出当前shell脚本,并返回n值!

#!/bin/bash
# Filename: 案例3.sh
# Describe: 脚本中定义标识,此时-->echo $?的返回值是自定义的标识!
# 可以通过返回值的标识来定义对应的东西!

read -p "请输入数字:" number
case $number in
 1)
   echo -e "开启服务1"
   exit 1
  ;;
 2)
   echo -e "重启服务1"
   exit 2
  ;;
 3)
   echo -e "关闭服务1" #没开启则不管,开启则关闭!
   exit 3
  ;;
 4)
   echo -e "错误操作服务1"
   exit 10
  ;;
esac

测试

命令行(终端)中执行如下代码观察输出:

echo $?

终端捕获程序的退出码的约定

(1) 0表示成功<---->非0表示失败
(2) 2表示用法不当(Incorrect Usage)
(3) 127表示命令没有找到(Command Not Found)
(4) 126表示不是可执行的(Not an executable)
(5) >=128 信号产生

补充:脚本中运行脚本,脚本1需要脚本2的命令回传码进而完成定向任务!

(4)return

          特点:表示函数返回值,只退出函数不退出脚本

 注意:return返回值是整数,若返回不是整数的返回值,将会得到一个错误

 return: hello: numeric argument required
#!/bin/bash
# Filename: return.sh
# Describe: 函数的执行-->函数的返回值的获取!函数的传参!函数不一定需返回值
# 函数中使用return返回时-->返回值的数据类型必须是数字
# return 8 --->是字符串!
read -p "随便输入的内容:" input

#函数的定义
function functionName (){
   #result=`expr ${input} + ${1}`                      
   result=$(($input+$1))                           #数值计算
   #echo -e "result is:${result}"
   return ${result}                                #自定义函数的结束标志
}

#return只能返回0~255之间到数,如果大于255,返回值将为除以256的余数!
#函数的执行-->得到返回值

# 使用$(func_name arg1 arg2 ...)来获取函数中所有的echo值
# 所以最前面是"函数的返回值是:"
 rt=$(functionName 10)                             #带参运行函数
 # echo -e "rt is:${rt}"                           #注意1:有没有这行的区别
 #如果对"注意1"注释,得到的是函数的返回值,否则是echo命令的回传码!
 res2=`echo $?`                                    
 echo  "函数的返回值是:${res2}"                      #稍后去掉此处的注释

echo和return子shell函数中的应用

比较重要

注意1:函数默认是将标准输出传递出来(函数中最好不要echo),不是返回值

a=`functionname`

说明:将函数functionname的标准输出传递给a

注意2:使用$?接收上一脚本、程序或者函数的返回值状态,也就是return的值

functionname arg1 ...

echo $?

这里输出的是函数的返回值

注意3:在shell函数return的值是赋值给$?的(可能被其它的命令覆盖),而函数执行后变量接收的值是函数中echo的输出值

------------------------------------------------------------------------------------------------------------------------------------------------------

return 与 exit的区别

1、exit用于在程序运行的过程中随时结束程序,exit是结束一个进程,它将删除进程使用的内存空间,同时把错误信息返回父进程;而return是返回函数值并退出函数!

2、return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束

、while的特殊应用

        死循环特殊用法:一直循环,直到给出中断信号!

        需求:从一个文件中读取每一行赋值给变量

#!/bin/bash
# Filename: while特殊的应用.sh
# Describe: 
export PATH
while read readLine         #逐行读取文件的内容,将每一行的内容保存在变量readline!
do
    echo ${readLine}
done < `pwd`/while的特殊用法 #输入重定向需要读取的文件

#多行注释
<<COMMENT
    cat `pwd`/while的特殊用法|while read readLine
      do
        echo ${readLine}
      done
COMMENT

    说明:最好每一行要有特殊的含义

Shell_Linux bash shell 逐行读取文件的三种方法

Shell逐行读取文件的4种方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值