shell编程之函数

定义函数

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 参数使用 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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容