day63 shell的练习

day63 shell 的练习题

看看练习题

date +%F 2025-05-03

date +%d 3

# 根据系统的时间打印出,今天,明天的时间,至少用3种的写法

[root@master-61 ~]# echo "今天是 $(date +%d) 号"
今天是 03 号

[root@master-61 ~]# echo "明天是 $[$(date +%d) + 1] 号"
明天是 4 号

[root@master-61 ~]# echo "明年是 $[$(date +%y) + 1] 年"
明年是 26 年


#提取日期的格式化
[root@master-61 ~]# echo "当前日期和时间是 $(date +%y-%m-%d-%T) "
当前日期和时间是 25-05-03-17:47:56 

[root@m-61 ~/part3-shell]#echo "今年过去了 $(date +%j) 天"
今年过去了 174 天
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#


[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#echo "今年还剩下 $[ 365 - $(date +%j)]天"
今年还剩下 191天

还剩下多少个星期
[root@m-61 ~/part3-shell]#echo "今年还剩下 $[ (365 - $(date +%j)) / 7 ] 个星期"
今年还剩下 27 个星期

简易版计算机开发

交互式接收用户的输入

用read命令去写,更像计算机

#!/bin/bash

read -p "please input first num:"  num1

read -p "please input sign :"  sign 

read -p "please input second num:" num2


# 计算结果,使用数学计算表达式  $[ ]

echo "计算结果是:$[ ${num1} ${sign}  ${num2}    ]"

[root@m-61 ~/part3-shell]#bash calc.sh 
please input first num:8
please input sign :/
please input second num:2
计算结果是:4

方案2 用位置参数去写

[root@master-61 ~]# bash sum.sh 1+2
计算的结果 :3
thanks you use


num1=${1}
num2=${3}
sign=${2}

# 计算的结果

echo "计算的结果 :$[ ${num1} ${sgin} ${num2} ]"

echo "thanks you use"




作业题的讲解

要理解脚本,采集服务器数据,要提取精确的数值

写脚本的思路,编写的思路学习

1. 采集主机的信息,提议
写脚本,提取当前机器的静态的数据,包括如下,写入文件/tmp/server_info.log

2. 开发思路
先别写脚本,先把命令都写正确了。最后就不直接塞入 $() 符号

--------【系统版本】------------
具体的工作要精确提取那些的信息,根据业务要求来,灵活的使用linux命令即可。

[root@master-61 ~]# echo "当前主机,系统版本的信息是:$(cat /etc/redhat-release)"
当前主机,系统版本的信息是:CentOS Linux release 7.9.2009 (Core)


[root@master-61 ~]# echo "当前系统版本是:$(grep -i 'pretty_name' /etc/os-release | awk -F '"' '{print $2} ')"
当前系统版本是:CentOS Linux 7 (Core)

------内核的版本---------
[root@master-61 ~]# echo "当前内核的版本是:$(uname -r)"
当前内核的版本是:3.10.0-1160.71.1.el7.x86_64

主机名
[root@master-61 ~]# echo "当前系统主机名是: $(hostname)"
当前系统主机名是: master-61

eth0网卡ip,建议写法如下,提取系统直接看到,正确使用ip
以系统正在使用的数据,为提取的标准,

[root@m-61 ~]#echo "当前系统eth0网卡ip是:$(ifconfig eth0 |awk 'NR==2{print $2}')"
当前系统eth0网卡ip是:10.0.0.61




读取网卡配置文件,过滤出的ip,不建议这么用,


eth1网卡ip
[root@m-61 ~]#echo "当前系统eth1网卡ip是:$(ifconfig eth1 |awk 'NR==2{print $2}')"
当前系统eth1网卡ip是:172.16.1.61


当前主机的公网ip,看懂  刷33333
# 访问了一个互联网中的网站ifconfig.me 人家网站拿到了你的remote_addr,直接

[root@m-61 ~]#echo "当前网络环境,对外的公网IP是:$(curl -s ifconfig.me )"
当前网络环境,对外的公网IP是:115.171.167.199




内存使用率
[root@m-61 ~]#echo "当前内存已使用的百分比情况是 :$(free -m | awk 'NR==2{print $3/$2*100}')%"
当前内存已使用的百分比情况是 :3.10117%

磁盘使用率(判断,当根目录分区容量不足30%的时候,告诉运维,该扩容了)
如何获取出根目录分区的使用率。

[root@m-61 ~]#echo "当前根目录分区已用资源百分比是 :$(df -h|awk '/\/$/{print $5}')"
当前根目录分区已用资源百分比是 :80%




CPU使用率
松麟:【mpstat 这个命令也行 】看你们自己发挥了,办法有很多。
ansible 提取更方便了,随你用N种办法
这里是为了让大家练习,解决问题的思路,锻炼。



解决思路,参考解决办法

1. 利用top命令,或者 读取该 /proc/cpuinfo cpu资源信息文件

2. 提取cpu空闲率字段

3. 生产服务器,资源一般不会 99.9空闲的,模拟一定的压测

4. 脚本提取资源使用情况,一般是指某一个时间点的快照

日后你要写服务器资源监控脚本,判断一旦cpu使用率超过 85%,立即给运维发邮件,报警。

# 用如下命令
# 模拟当前机器,有一定的cpu压力
# 这3,个写法,都是核心在于,提取第八个字段的数据!!!!坑在这里。
# 当我撤掉机器的cpu压力

top -n1 | grep "Cpu(s)" |awk '{print 100-$8}'  # 目前对的



echo  "CPU使用率: $(top -n 1 | awk 'NR==3  {print  100-$8}')%"  # 目前对的

top -n1 | awk 'NR==3{print 100-$8"%"}'  # 目前对的


#### 如上几个答案,都存在top命令动态更新的坑,建议用志伟这个办法,或者其他大家自行琢磨。

# sar 动态获取服务器的资源使用率,  
# 每隔1秒,获取1个数据
# sar -u 显示所有信息,显示比较齐全
# sar命令是一个优秀的性能检测命令,但是得额外安装,sysstat包
# 

echo -e "CPU使用率如下--$(sar -u 1 1|awk 'NR==5{print 100-$NF}')%"

建议如下






最终服务器信息采集脚本

#!/bin/bash


# 采集当前服务器信息的脚本

echo -e " 
当前系统版本是:$(grep -i 'pretty_name' /etc/os-release |awk -F '"' '{print $2}')
当前系统内核版本是:$(uname -r)
当前系统主机名是:$(hostname)
当前系统eth0网卡ip是:$(ifconfig eth0 |awk 'NR==2{print $2}')
当前系统eth1网卡ip是:$(ifconfig eth1 |awk 'NR==2{print $2}')
当前网络环境,对外的公网IP是:$(curl -s ifconfig.me )
当前内存已使用的百分比情况是 :$(free -m | awk 'NR==2{print $3/$2*100}')%
当前根目录分区已用资源百分比是 :$(df -h|awk '/\/$/{print $5}')
CPU使用率如下--$(sar -u 1 1|awk 'NR==5{print 100-$NF}')%
============================================================" >> /tmp/server_info.log

posted @ 2025-05-03 19:39  国家一级冲浪yzk  阅读(12)  评论(0)    收藏  举报