定义函数
fun_name () {
...
}
fun_os_version () {
sed -nr 's/^VERSION_ID=\"([0-9])\"/\1/p' /etc/os-release
}
echo OS_VERSIOn is `fun_os_version`
# 这里的函数调用使用的是`func`
使用函数文件
创建函数文件
创建函数文件
vim functions
fun_os_version () {
sed -nr 's/^VERSION_ID=\"([0-9])\"/\1/p' /etc/os-release
}
载入函数
在需要用到函数的脚本中载入函数文件
#! /bin/bash
source functions
echo OS_VERSIOn is `fun_os_version`
函数参数,返回值和调用
1 参数使用 2, ...
2 返回值 return
# 函数定义
fun_is_digit () {
17 if [ ! "$1" ]; then
18 echo "Usage: input a digit parameter"
19 return 10
20 elif [[ $1 =~ ^[[:digit:]]+$ ]]; then
21 return 0
22 else
23 return 1
24 fi
25 }
# 函数调用
source functions
13 read -p "Input your scrot: " SCORE
14 fun_is_digit $SCORE
15 if [ $? -ne 0 ]; then
16 exit
17 else
18 if [ $SCORE -lt 60 ]; then
19 echo "you are a loser"
20 elif [ $SCORE -gt 90 ]; then
21 echo "you are a superman"
22 else
23 echo you pass exam
24 fi
25 fi
函数local变量
[root@test1_c1 scripts]#num=200; fun(){ num=100; echo $num; }
[root@test1_c1 scripts]#fun
100
[root@test1_c1 scripts]#echo $num
100
[root@test1_c1 scripts]#num=200; fun(){ local num=100; echo $num; }
[root@test1_c1 scripts]#fun
100
[root@test1_c1 scripts]#echo $num
200
递归
递归脚本
echo $BASHID
sleep 1
./resursio.sh
递归函数
fun_fac () {
if [ $1 -eq 0 ];then
echo 1
else
echo $[$1*$(fun_fac $[$1-1])]
fi
}
fork炸弹
:(){ :|:& };:
信号捕捉
trap '触发指令' 信号
进程收到系统发出的指定信号后,将执行自定义的指令,而不会执行原操作
trap '' 信号
忽略信号操作
trap '-' 信号
恢复原信号的操作
trap -p
列出自定义信号操作
trap finish EXIT
当脚本退出时,执行finish函数
trap 'echo press ctrl+c' int
trap -p
for((i=0;i<10;i++));do
echo $i
sleep 1
done
trap '' 2
trap -p
for((i=10;i<20;i++));do
echo $i
sleep 1
done
trap '-' 2
trap -p
for((i=20;i<30;i++));do
echo $i
sleep 1
done
#######################################
finish () {
echo finish run
}
trap finish exit
for((i=0;i<=5;i++));do
echo $i
sleep 1
done