为了账号安全,请及时绑定邮箱和手机立即绑定

以下代码是关于shell脚本的问题,求大佬解释!

以下代码是关于shell脚本的问题,求大佬解释!

largeQ 2021-10-15 15:11:31
vi login.root01#!/bin/bash02echo "This is a private server,please leave,thanke you!"03echo "Welcome $USER To Login To This Server!"04LoginUserNum=`who | wc -l`05OpenProcesNum=$(expr $(ps aux | wc -l) - 1)06FreeMem=`free -m | grep Mem: | awk '{print $4}'`07FreeBuffers=`free -m | grep - | awk '{print $3}'`08FreeCache=`free -m | grep - | awk '{print $4}'`09FreeSwap=`free -m | grep Swap: | awk '{print $4}'`10echo "Number of Login Users:"$LoginUserNum11echo "Numbre of Running Processes:"$OpenProcesNum12echo "Free Memory Size(MB):"$FreeMem13echo "Free Buffers Size(MB):"$FreeBuffers14echo "Free Cache(MB):"$FreeCache15echo "Free Swap Space Size(MB):"$FreeSwap本人没有一点liunx基础 但由于是任务 所以小白菜求救 每条命令解释一定要详细点 通俗点 谢谢了
查看完整描述

1 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

第一行 #!/bin/bash 指定用bash来执行该shell脚本

第二行 echo...简单打印出This is a private server,please leave,thanke you!这句话

第三行 echo...简单打印出Welcome $USER To Login To This Server! 其中$USER会被替换为执行该脚本的用户名

第四行 who命令打印出当前登陆该服务器的所有用户 每个用户一行 “|” 是管道操作 把who操作的结果传给wc -l。而wc -l 统计出一共多少行 也就是有多少用户 最后赋值给LoginUserNum,所以LoginUserNum表示当前登陆的用户数。

第五行 ps aux列出当前所有的进程信息 每个进程占一行 管道给wc -l统计得到总的进程数,由于 ps aux也会生成一个进程 所以要减到自身 expr做算术的减法 得到实际的总进程数 最后赋值给OpenProcesNum

第六行 free -m命令得到下面类似的输出,管道给grep Mem:,grep是逐行查找命令,在这里找到“Mem:”所在的行 在经管道传给awk,awk默认按空格将每行切分成多个记录 每个记录用$i表示,例如$1=Mem:$2=3947 $3=3886....所以print $4也就是打印61 也就是mem对应的free部分 赋值给FreeMem

 

第七行grep -找到 -所在的行 也即-/+ buffers/cache:那行 打印$3也就是图中的2158 对应free部分 赋值给FreeBuffers

第八行类似  grep -找到 -所在的行 也即-/+ buffers/cache:那行 复制给FreeCache(不懂为啥是$4)

第九行类似 grep Swap:找到Swap:所在行 打印$4也即图中9629 对应free部分 赋值给FreeSwap

第十到十五行echo... 将前面赋值的结果分别打印出来

###########我是分割线####################

其中的命令 who、who|wc -l、ps aux、free -m、 free -m | grep Mem: 都可以在shell里自己试试 看看输出是什么 会直观一点



查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信