一、结束标示的总结
(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}" #稍后去掉此处的注释
注意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 逐行读取文件的三种方法