shell脚本创建及运行

# Shell命令

##  编写Shell脚本,完成一个对端口eth33的实时流量监控并输出

实验步骤如下:

1. 在命令行中执行命令touch thirdShell.sh以创建第三个Shell脚本。

```shell
[root@localhost ~]# touch thirdShell.sh
```

2. 在命令行中执行命令vi thirdShell.sh进入Shell脚本开始编写。

```shell
[root@localhost ~]# vi thirdShell.sh
```

3. 点击键盘上“i”按键开始写入,写入脚本如下:

```shell
#!/bin/bash    带#是注释
eth0=$1                  #表示eth0为输入数据"sh thirdShell.sh ens33 b c"的第一个,$n表示输入数据的第n个
echo  -e    "in--out"    #-e为激活转义字符 例如\t为加入tab
while true; do           # 循环语句,这个循环会一直运行
    old_in=$(cat /proc/net/dev |grep $eth0 |awk '{print $2}')      
    #grep命令是linux中一种强大的文本搜索工具,并把匹配的端口$eth0行打印出来
    #awk使用字段操作符$来指定字段。在该操作符后面跟着一个数字或变量,用于标识字段的位置。“$1”表示第一个字段,“$2”表示第二个字段      等等。“$0”表示整个输入记录。
    #旧的输入流量
    old_out=$(cat /proc/net/dev |grep $eth0 |awk '{print $10}')
    #旧的输出流量
    sleep 1 #等一秒钟
    new_in=$(cat /proc/net/dev |grep $eth0 |awk '{print $2}')
    new_out=$(cat /proc/net/dev |grep $eth0 |awk '{print $10}')
    #同理
    in=$(printf "%.1f%s" "$((($new_in-$old_in)/1024))" "KB/s")
    out=$(printf "%.1f%s" "$((($new_out-$old_out)/1024))" "KB/s")
    # 计算一秒钟进来的流量和出去的流量
    echo "$in $out"
    #输出一秒钟进来的流量和出去的流量
done

```

4. 点击键盘上“Esc”键,输入“:wq”并回车,退出vim。

5. 输入命令 sh thirdShell.sh ens33 或 bash thirdShell.sh ens33运行thirdShell.sh脚本,最后查看输出结果。

## 编写Shell脚本,要求输出CPU、IO接口、硬盘、内存的使用情况以及TCP连接的情况。

1. 在命令行中执行命令touch forthShell.sh以创建第四个Shell脚本。

```shell
[root@localhost ~]# touch forthShell.sh
```

2. 在命令行中执行命令vi forthShell.sh进入Shell脚本开始编写。

```shell
[root@localhost ~]# vi forthShell.sh
```

3. 点击键盘上“i”按键开始写入,写入脚本如下:

```shell
#!/bin/bash
function cpu(){
    
    util=$(vmstat | awk '{if(NR==3)print $13+$14}')
    #第三行13、14列相加为cpu使用率
    iowait=$(vmstat | awk '{if(NR==3)print $16}')
    #16列为等待磁盘io使用率
    echo " CPU - Usage:${util}% , disk IO to be utilized accordingly:${iowait}:${iowait}%"
    #输出 
 
}
function memory (){
 
    total=`free -m |awk '{if(NR==2)printf "%.1f",$2/1024}'`
    #free 命令 可以显示当前系统未使用的和已使用的内存数目  free-m显示如下
    #          total       used       free     shared    buffers  available
    # MEM: 
    # SWap:
    #第二行第二列除以1024
    used=`free -m |awk '{if(NR==2) printf "%.1f",($2-$NF)/1024}'`
    #第二行的第二列与最后一列的差除以1024
    available=`free -m |awk '{if(NR==2) printf "%.1f",$NF/1024}'`
    echo " Memory - Total size: ${total}G , used: ${used}G , remainder: ${available}G"
}
disk(){
#磁盘使用情况函数
    
    fs=$(df -h |awk '/^\/dev/{print $1}')
    for p in $fs; do  
    #遍历/dev开头的行,挂载点记录最后一列,容量记录第二列,已使用记录第三列,使用率记录第5列
        mounted=$(df -h |awk '$1=="'$p'"{print $NF}')
        size=$(df -h |awk '$1=="'$p'"{print $2}')
        used=$(df -h |awk '$1=="'$p'"{print $3}')
        used_percent=$(df -h |awk '$1=="'$p'"{print $5}')
        echo " Hard Disk - Mount Point: $mounted , Total size: $size , used: $used , Usage: $used_percent"
    done
 
}
function tcp_status() {
#tcp连接情况函数
    summary=$(ss -antp |awk '{status[$1]++}END{for(i in status) printf i":"status[i]" "}')
    #第一列记录ss-antp每个状态数量,除了State表头
    echo " TCP connection status - $summary"
}
cpu
memory
disk
tcp_status

```

4. 点击键盘上“Esc”键,输入“:wq”并回车,退出vim。

5. 输入命令 sh forthShell.sh 或 bash forthShell.sh运行forthShell.sh脚本,最后查看输出结果。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值