博观而约取,厚积而薄发。这篇文章主要讲述#yyds干货盘点#函数高级用法递归和高级工具expect等相关的知识,希望能为你提供帮助。
函数递归:函数直接或间接调用自身,注意递归层数,可能会陷入死循
【#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.
函数递归
[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 :内存溢出,导致进程不够,挑出一些进程来杀,保证进程可以够使用
3.
trap信号捕捉
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
trapint #发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
查看所有的信号
[root@c7-147 init.d]#kill -l
1) SIGHUP2) SIGINT3) SIGQUIT4) SIGILL5) SIGTRAP
6) SIGABRT7) SIGBUS8) SIGFPE9) 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) SIGURG24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH29) SIGIO 30) SIGPWR
31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+3
38) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8
43) SIGRTMIN+944) 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-956) SIGRTMAX-857) SIGRTMAX-7
58) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX
推荐阅读
- #私藏项目实操分享#分布式技术专题「分布式ID系列」百度开源的分布式高性能的唯一ID生成器UidGenerator
- #yyds干货盘点#Vuex实战讲解(全),玩转Vue必备知识
- spring-boot-devtools 快速重启的秘密!#yyds干货盘点#
- 算法 | 第2章 链表相关《程序员面试金典》#yyds干货盘点#
- #yyds干货盘点#Redis缓存三大问题,一次解决
- #私藏项目实操分享#Java技术开发专题系列之Guava RateLimiter针对于限流器的入门到实战(含源码分析介绍)
- linux修改磁盘分区容量大小#yyds干货盘点#
- #yyds干货盘点# 20张图带你了解JVM运行时数据区(上)
- Spring的七大模块#yyds干货盘点#