第五 shell函数
@(shell脚本)[学习]
[toc]
函数的执行
执行不带参数的函数时,直接输入函数名即可
- 执行Shell函数时,函数名前的
function
和函数后面的小括号都不要带 - 函数的定义必须在执行的程序前面定义或加载
- Shell执行系统中各种程序的执行顺序为:系统别名->函数->系统命令->可执行文件
- 函数执行时,会和调用它的脚本共用变量,也可以为函数设定局部变量及特殊位置参数。
- 在shell函数里面,return命令的功能与exit类似,return的作用是退出函数,而exit是退出脚本文件
- return语句会返回一个返回值给调用函数的当前程序,而exit会返回一个返回值给执行程序的当前shell
- 如果将函数存放在独立的文件中,被脚本加载使用时,需要使用
source
或者”.
“来加载 在函数内一般使用local定义局部变量
带参数的函数执行方法如下:
函数名 args1 args2 ..
shell的位置参数都可以作为函数的参数来使用。
- 此时父脚本的参数临时地被函数参数所掩盖或隐藏
- $0比较特殊,它仍然时父脚本的名称
- 当函数执行完成时,原来的命令行脚本的参数即可恢复
- 函数的参数变量时在函数体里面定义的
学习了函数后,应该尽量将脚本功能模块化,每个模块实现一个功能,并且让脚本可以通用。
case条件语句
case条件语句相当于多分支的if/elif/else条件语句,但是它比这些条件语句看起来更规范更工整。
- case语句和if语句的实用性
case语句比较适合变量值较少且为固定的数字或字符串集合的情况 - case语句和if语句的常用场景
- case主要写服务的启动脚本,传参不同且具有少量的字符串
- 几乎所有的case语句都可以用if语句来实现
- case语句的特点及优势
规范,易读while循环和until循环
while循环使用与频率小于1分钟的循环处理,其他的while循环几乎都可以被for循环和crond功能代替123456789while <条件表达式>docommand...done---------------------until <条件表达式>docommand...done
for和select循环语句
for循环语句
for循环主要用于执行次数有限的循环,而不是用于守护进程及无限循环
在此结构中“in 变量取值列表”可以省略,省略时相当于in “$@”,也就是
for i in "$@"
c语言型for循环
使用ls与awk实现批量改名
使用rename改名
select 循环语句
select 循环语句的主要作用可能就是创建菜单,在执行带select循环语句脚本时,输出会按照数字顺序的列表显示一个菜单项,并显示提示符,同时等待用户输入数字顺序的列表进行选择。
相当于半自动可控for循环。
使用PS3='...'
来改变默认提示符$REPLY
变量为上一个输入的值
循环控制及状态返回值
break,continue,exit,return
命令 | 说明 |
---|---|
break n | 跳出整个循环,n表示跳出循环的层数 |
continue n | 跳过本次循环,n表示跳过循环的次数 |
exit n | 退出当前shell程序,n为状态返回值 |
return n | 函数返回 |
以上n均可省略
shell数组
|
|
输出数组的所有元素值
动态定义数组
数组也是变量,所以前面的变量子串知识也试用与数组 。例如
echo ${\#array[@]}
获取数组长度