#yyds干货盘点#函数高级用法递归和高级工具expect等

Posted 王华_linux

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#函数高级用法递归和高级工具expect等相关的知识,希望对你有一定的参考价值。

函数递归:函数直接或间接调用自身,注意递归层数,可能会陷入死循

阶乘是基斯顿·卡曼于 1808 年发明的运算符号,是数学术语,一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0和1的阶乘为1,自然数n的阶乘写作n! n!=1×2×3×...×n

阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n

n!=n(n-1)(n-2)...1

n(n-1)! = n(n-1)(n-2)!

1.  函数递归

#yyds干货盘点#函数高级用法递归和高级工具expect等_bash

[root@c7-147 init.d]#cat face.sh 
#!/bin/bash
fact()
if [ $1 -eq 0 -o $1 -eq 1 ]; then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi

fact $1
[root@c7-147 init.d]#bash face.sh 6
720
[root@c7-147 init.d]#bash face.sh 5
120

2. fork 炸弹

fork 炸弹是一种恶意程序,它的内部是一个不断在 fork 进程的无限循环,实质是一个简单的递归程序。由于程序是递归的,如果没有任何限制,这会导致这个简单的程序迅速耗尽系统里面的所有资源

参考:https://en.wikipedia.org/wiki/Fork_bomb​​​​​

函数实现

:() :|:& ;:
bomb() bomb | bomb & ; bomb

OOM :内存溢出,导致进程不够,挑出一些进程来杀,保证进程可以够使用

#yyds干货盘点#函数高级用法递归和高级工具expect等_bash_02

3.   trap信号捕捉

#yyds干货盘点#函数高级用法递归和高级工具expect等_i++_03


trap 触发指令 信号

进程收到系统发出的指定信号后,将执行自定义指令,而不会执行原操作


trap 信号

忽略信号的操作


trap - 信号

恢复原信号的操作


trap -p

列出自定义信号操作


trap finish EXIT

当脚本退出时,执行finish函数


[root@c7-147 init.d]#cat trap.sh
#!/bin/bash
trap echo "Press ctrl+c" int quit #捕获到int 和quit两个信号就echo "Press ctrl+c"
trap -p #打印自定义的信号行为
for((i=0;i<=10;i++))
do
sleep 1
echo $i
done
trap int #发int 信号当做啥也没有看到
trap -p
for((i=11;i<=20;i++))
do
sleep 1
echo $i
done
trap - int #发 int 信号就恢复旧的功能
trap -p
for((i=21;i<=30;i++))
do
sleep 1
echo $i
done

#yyds干货盘点#函数高级用法递归和高级工具expect等_递归_04

查看所有的信号

[root@c7-147 init.d]#kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX#yyds干货盘点# 更高级别的抽象---函数式思想

#yyds干货盘点# 网络高级配置和多网卡绑定实现

高频面试java高级进阶之锁?与CAS详解#yyds干货盘点#

#yyds干货盘点#高级IO模型之kqueue和epoll

使用Dynamic LINQ创建高级查询服务 #yyds干货盘点#

Markdown 高级技巧#yyds干货盘点#