shell基础之函数、递归、信号

一、函数

1.语法

方法1:
函数名() {
    函数体
    return n
}
方法2:
function 函数名() {
    函数体
    return n
}

2.调用函数

3.引用函数

注意:每次引用函数时,bash会重新回到函数的定义
函数不一定要在最开始定义,但是如果函数在定义前就使用,会报错
函数名必须是唯一的,如果重新定义了函数,新的函数会覆盖旧的

4.返回值

1)默认退出状态码:默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码

2)使用return命令
shell使用return命令来退出函数并返回特定的退出状态码

3)使用函数输出
将函数的输出保存在shell变量中,可以获得任何类型的函数输出并将其保存到变量中


4)函数中使用变量
可以向函数中传递参数
函数名会再$0变量中定义,函数命令行上的任何参数都会通过$1,$2定义
$#来判断传给函数的参数数目

练习:定义算法,当用户的输入不符合输入要求时,告诉用户具体用法,当输入正确时,计算乘积

5)函数不能直接从命令行获取脚本的参数值

二、变量的作用域

1)全局变量

整个脚本内均有效,即可在函数体内调用,也可在函数体外

注意:由于temp value在函数体外定义,是整体变量,所以在进行大小判断时,是调用函数后的值再进行比较,此时temp是11,所以显示temp大,这显然是不合理的,所在在函数体内,我们要加local  value,指明它是局部变量,仅在函数体内生效,再次大小比较时,这次是全局变量temp4和value6比较,当然temp小了。

2)局部变量:定义方法:local value

三、函数递归

练习:用函数实现计算阶乘

四、信号

1)捕捉信号trap

列出中断信号与键盘的关系 stty -a

2)信号屏蔽,恢复

练习:写一个屏蔽ctrl+c的脚本

#!/bin/bash
trap "echo 'Sorry!I have trapped Ctrl+C'" 2 ##当按ctrl+c时,打印我已屏蔽此信号
echo "This is a test script"

count=1
while [ $count -le 5 ]
do
    echo "Loop #$count"
    sleep 2                  ##等待2s
    count=$[ $count + 1 ]
done

echo "This is the end of the script~"
trap - 2       ##恢复信号
echo "I just removed the trap"

3)捕捉脚本退出

练习:先自动建立文件,然后使用ctrl+c信号删除建立的文件

[root@localhost mnt]# cat touch.sh 
#!/bin/bash

trap   "find /tmp -type f -name "westos_*" | xargs rm -f && exit " 2   ##查找文件按信号2执行全部删除

while true
do
	touch /tmp/westos_$(date +%F-%N-%M-%S)  ##以时间为后缀建立文件
	sleep 2
	ls -l /tmp/westos*
done

猜你喜欢

转载自blog.csdn.net/passion_for_life/article/details/85543427
今日推荐