当前位置:   article > 正文

shell脚本实战 | 6个入门级shell脚本(CPU负载、监控、计划任务)

shell脚本实战

前言

shell博大精深,希望以下案例能起到一个抛砖引玉的作用。

说明

本文shell文件存放目录,默认为/root/myshell,文中不再累述。

导引

文中六个案例,均有提纲,如对某个案例感兴趣,可根据提纲直入主题。

一、案例1,随意输入两个整数,计算其平方和

1.1、方法一 ,使用系统预定义变量(非交互式)

1.1.1、编写脚本

  1. mkdir /root/myshell #创建测试目录
  2. cd /root/myshell #切换到shell存放目录
  3. vim pingfang #编辑shell脚本

脚本内容

#!/bin/bash #声明shell类型,该行不可缺失(重要)

#note:count two number square sum

result=$(expr $1 \* $1 + $2 \* $2 )

echo "$1和$2的平方和=$result" 

说明:

1、$()的作用和反撇号一致,增强可读性。

2、expr是算式(表达式)的前缀;

3、其中$1、$2是占位符。

4、乘号由于是特殊字符,需要转义,每个计算符号前后,都需要有空格。

1.1.2、验证脚本 

#. pingfang 5  2 注:点后面有个空格

 

1.2、方法二,使用read -p交互式,输出结果

1.2.1编写脚本

#vim pingfang.sh

脚本内容 

 #!/bin/bash
#计算两个数的平方和
read -p "请随意输入两个整数,用于计算平方和(中间用空格隔开):" num1 num2
result=$(expr $num1 \* $num1 + $num2 \* $num2)
echo "$num1和$num2的平方和=$result"

注:read -p 可实现交互式输入。 

 

1.2.2、验证脚本

#. pingfang.sh  运行并查看结果

 

二、案例2,对/etc/init.d下的服务,实现随意、启动 停止 当前状态的查看

#ls /etc/init.d  查看一下该目录下都有哪些服务

注意:ls /etc/init.d  命令的目的是,查看该目录下都有哪些服务,只有这些已存在的服务,才可以使用下面的脚本启动、停止、查看状态! 

 

2.1、编写脚本

#vim service.sh

 #!/bin/bash
/etc/init.d/$1  $2

说明:$1 $2 是系统的预定义变量,此处可以理解为在实际命令中的占位符(分别替换实际命令中的两个位置)。 

2.2、验证脚本

  1. #service.sh network stop
  2. #service.sh network start
  3. #service.sh network restart

 

三、案例3,过滤出本机eth网卡的MAC地址,并把过滤结果赋值给hwaddr变量

3.1、编写脚本

#vim hwaddr.sh

#!/bin/bash
Hwaddr=$(ifconfig | grep eth | awk '{print $2}')
echo "网卡的MAC地址:$Hwaddr" 

 

说明:| grep eth 从前面的结果集中,过滤出 带有eth字母的行;

awk 命令是文本处理命令,很强大, {print $2 }打印出结果集的第二列。 

3.2、验证脚本

#. hwaddr.sh 运行,查看结果

 

四、案例4,计算当前的内存使用百分比

4.1、编写脚本

  1. #free -m 先查看一下内存使用情况
  2. #vim memory.sh

#!/bin/bash
#free -m
mem_total=$(free -m | grep "Mem" | awk '{print $2}')
mem_used=$(free  -m | grep "Mem" | awk '{print $3}')
echo "当前内存总大小为$mem_total M"
echo "已使用$mem_used M"
echo "当前内存已使用百分比为$(expr $mem_used \* 100 / $mem_total )%"

 

4.2、验证脚本

#. memory.sh 运行脚本;注:第一个点后面是有空格的

 注:这里有个疑问,查看内存使用情况的时候,used是575,打印出来就变成576了,这里表示不太理解。

五、案例5,管理员在登录系统时显示如下信息

1)当前系统的登录用户的数量
2)当前运行的进程数量
3)当前使用的磁盘根分区的使用情况

5.1、编写脚本

#vim sysinfo.sh

脚本内容 

#!/bin/bash
#show sysinfo
echo "root disk used info :"
df -h | grep "/$" 

LoginCount=$(who | wc -l )
PsCount=$(expr $(ps -aux | wc -l ) - 1 )
RootDiskUsed=$(df -h | grep "/$" | awk '{print $5}' )

echo "当前登录系统的用户数量=$LoginCount"
echo "当前进程的数量=$PsCount"
echo "当前根分区已使用$RootDiskUsed" 

说明:wc -l 意思是对结果集的行数进行计算;

ps -aux 显示当前所有线程;

df -h 查看当前磁盘挂载以及使用情况。 

 

5.2、验证脚本

#. sysinfo.sh

 

5.3、在开机启动项,添加此脚本使之开机自动运行

1) 给脚本赋予x执行权限,否则开机自动运行时会提示:bash: /root/myshell/sysinfo.sh: Permission denied  权限不足,被拒绝执行

  1. #chmod 744 /root/myshell/sysinfo.sh
  2. 或者
  3. #chmod u+x /root/myshell/sysinfo.sh 给当前用户添加x执行权限

2)编辑开机自动运行脚本

#vim /root/.bash_profile 注:这个是一个隐藏的文件,ll -a 才可以看到

尾部追加,脚本内容,如下图所示

/root/myshell/sysinfo.sh 

5.4、在Xshell中再次验证

exit 退出Xshell,重新登录Xshell,查看效果

六、案例6,写一个监控脚本,记录CPU负载、内存和交换空间、磁盘空间、最近的用户登录情况等信息,以及当时的时间信息

6.1、编写脚本

#vim monitor.sh

 #!/bin/bash
CpuRec=`uptime`
MemRec=`free -m`
DiskRec=`df -hT`
LastUserLoginRec=`last -20`
RecTime=`date  +"%Y-%m-%d %H:%M:%S"`
mkdir -p /var/log/runrec
RecFile=/var/log/runrec/runing-$(date +%Y%m%d%H%M)
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Record Time:
$RecTime
Cpu Load information:
$CpuRec
Memory information :
$MemRec
Disk use information :
$DiskRec
Last login 20 users record :
$LastUserLoginRec "#>>$RecFile

 

说明:这个案例里面的命令,都比较好理解,可以随意单独拿出来,看运行结果。其中

uptime 是看cup负载情况的 ;

最后一行“#>>$RecFile” 意思是把如上打印信息,输出到以时间命名的文件内(文件不存在则会自动生成)

6.2、验证脚本

  1. #. monitor.sh 运行脚本
  2. #cd /var/log/runrec 切换到日志目录
  3. #ls 查看生成的日志文件列表

6.3、编辑计划任务,使之每个小时执行一次

#crontab -e  打开计划任务编辑器

计划任务脚本内容 (脚本也比较简单:前面定义运行周期,依次用空格隔开,后面写脚本路径

* 1 * * * /root/myshell/monitor.sh
:wq 保存并退出。

说明:计划任务的执行时间,从前到后,依次是 分 、小时、日、月、星期(一个星期中的周几)。*代表不限具体某个对应时间。
具体说明可以输入命令:#vim /etc/crontab 查看计划任务的时间说明

 此时,每隔一个小时,就可以看到日志文件中多一个日志了。

尾言

以上案例,如果是首次接触,感觉是无从下手,看完案例,有种恍然大悟的感觉,案例虽然不难,但是如果想更好的使用Linux,还是需要苦练基本功,好记性不如烂笔头。

如果觉得对你有帮助,还不错,赶快点赞收藏吧!

如果你有更好的想法和建议,欢迎留言!

附注

猜你可能感兴趣

0、Shell编程: shell脚本5种执行方式 | 脚本不同的执行方法和区别

1、 Linux技巧(一): 查看系统内核/操作系统版本详解

2、Linux技巧(二):Linux sort命令深入解析 | sort -k M.m,N.n 命令详解

3、Linux技巧(三): seq命令 / mkdir -p 批量创建/删除文件夹 详解 

4、Linux技巧(四):用head tail sed 查看第N行到最后一行 | m,n行区间/固定行 | 前/后N行(以外)的内容 

5、 Linux技巧(五):expect安装与介绍 | 精美案例 

6、Linux技巧(六):命令尾部&的作用 &&、|、||、;、()、&>、 2>&1 的用法和区别,很实用

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/154128?site
推荐阅读
相关标签
  

闽ICP备14008679号