💬格言:你未必出类拔萃,但一定与众不同!🔥
📕 系列专栏:
🍎 阶段一:windows基础 目前原创16篇
🍎 阶段二:Linux基础知识 目前原创38篇
🍎 阶段三:shell基础+shell高级 目前原创23篇
🍎 阶段四:python基础及自动化应用 原创未开始
🍎 阶段五:Linux网络服务 原创未开始
🍎 阶段六:集群原理及架构 原创未开始
🍎 阶段七:云计算虚拟化技术 原创未开始
目录
1、函数
1.1shell函数定义的语法格式:
1.2举例:加到多少键盘输入决定
1.3Shift参数左移指令
1.4举例:加法计算器
2.trap命令
2.1trap用法举例:
3.cgroup详解
3.1cgroup主要功能:
3.2cgroup子系统:
3.3限制进程使用系统CPU百分比。
1、函数
shell函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好,放在指定位置,使用时直接调用即可。
shell中的函数和C++、JAVA、Python等其他编程语言中的函数类似,只是在语法中有所差别。
1.1shell函数定义的语法格式:
function name() {
statements
[return value]
}
对各个部分的说明:
function是shell中的关键字,专门用来定义函数;
name是函数名;
statements是函数要执行的代码,也就是一组语句;
return value表示函数的返回值,此处用方括号括起来表示这部分可以写也可以不写;
由{ }包围的部分称为函数体,调用一个函数,实际上就是执行函数体中的代码
函数定义的简化写法:
函数定义时可以不写function关键字:
name() {
statements
[return value]
}
如果写了function关键词,可以省略函数名后面的括号:
function name {
statements
[return value]
}
1.2举例:加到多少键盘输入决定
我们自己写一个函数,还是之前的从1加到100的循环。但这次我们用函数来实现, 不过不再是从1加到100了,而是让用户自己决定加到多少:
通过调用函数名的方式来调用到整个函数里的所有程序
[root@xiaopeng ~]# cat function.sh
#!/bin/bash
function 函数名 () {
s=0
for (( i=0;i<=$1;i=i+1 ))
do
s=$(( $i+$s ))
done
echo "$s"
}
read -p "请输入最大的数值:" num
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y" ]
then
函数名 $num
else
echo "警告,请输入阿拉伯数字!"
fi
1.3Shift参数左移指令
作用:每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参
数,移出去的参数,不再可用。
1.4举例:加法计算器
[root@xiaopeng ~]# cat shift.sh
#!/bin/bash
if [ $# -le 0 ];then
echo “没有足够的参数”
exit
fi
sum=0
while [ $# -gt 0 ] ; do
sum=$[$sum+$1]
shift
# shift 2 一次移动2个参数
done
echo result is $sum
测试:
[root@xiaopeng ~]# bash a shift.sh 11 2 3 4
result is 20
2.trap命令
命令格式为:
trap “执行动作” SIGINT(检测信号)
用于指定在接收到信号后将要采取的动作,常见的用途是在脚本程序被中断时完成清理工作。
trap -l:查询trap能够接收的信号。和kill -l相似
trap命令格式为:trap “执行动作” SIGINT(检测信号)整体命令为检测到SIGINT
信号或INT信号时会去执行echo 999的命令。但是只在命令行中执行可能会遇到的 问题是。trap命令在当前命令生效, 而一些比如tail -f /var/log/message命令在 子shell生效,所以并不能看到echo 9999的效果。而且,命令行中能够执行的 命令 有限,通常情况下trap命令会写到脚本中并且"执行动作"会用函数来代替。
2.1trap用法举例:
[root@xiaopeng ~]# cat test.sh
#!/bin/bash
#trap 'mytrap'
[video(video-8PGqMbZO-1716354551447)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=1804892953)(image-https://img-blog.csdnimg.cn/img_convert/d03a705143646f4f3f6ea879d59b2788.png)(title-必看视频!获取2024年最新Java开发全套学习资料)]
SIGINT INT #执行动作为函数mytrap,接收信号为SIGINT或INT
#trap 'mytrap' SIGINT #执行动作为函数mytrap,接收信号为SIGINT
trap 'mytrap' INT #执行动作为函数mytrap,接收信号INT
mytrap() { #定义函数mytrap
echo "Now,you are doing the QUIT" #输出字符串到h.txt中
tail -5 /var/log/messages >> /root/h.txt #追加message后5行到 h.txt
exit 1 #退出
}
while true #while循环输出数字1111
do
/usr/bin/echo "111111"
done
[root@localhost ~]# ./test.sh
111111
^C111111
Now,you are doing the QUIT
[root@xiaopeng ~]# cat h.txt
Oct 22 18:00:01 localhost systemd: Started Session 27 of user root.
Oct 22 18:01:01 localhost systemd: Started Session 28 of user root.
**3.**cgroup详解
cgroup:全称Linux Control Group,是Linux内核的一个功能,用来限制,控制与分离 一个进程组群的资源(比如CPU、内存、磁盘IO等)。
在Linux内核中,容器(container)一词太过广泛,为避免混淆被重新命名为cgroup,
并被合并到2.6.24版本内核中。
Linux Cgroup可以为系统运行进程的用户自定义群组分配资源,比如CPU时间、系统内 存、网络带宽等。可以监控配置的cgroup,拒绝cgroup访问某些资源,甚至在运行 的系统中配置cgroup
3.1cgroup****主要功能:
1.限制资源使用。如内存使用上限以及文件系统的缓存限制。
2.优先级控制,CPU利用率和磁盘IO吞吐。
3.挂起进行,恢复执行进程。
3.2cgroup子系统:
1.CPU子系统,主要限制进程的CPU使用率。
2.CPUacct子系统,可以统计cgroups中进程的CPU使用报告。
3.cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。
4.memory 子系统,可以限制进程的 memory 使用量。
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
4.memory 子系统,可以限制进程的 memory 使用量。
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
[外链图片转存中…(img-pZjMo3A1-1720155701586)]
[外链图片转存中…(img-s55QB4jn-1720155701587)]