shell之路 习题100例

准备环境

这里使用两台阿里云服务器测试,其中一台是运行网站程序

空机器(裸机,只安装了系统Centos7):m1 IP:47.244.191.206

待检测机器:m2 ,  IP:47.104.178.202

  系统:Centos6.10

  网站架构:LNMP(采用yum安装)

  网站代码程序:PHP

1.检测机器是否宕机(1)

监控一台远程主机

脚本运行在m1

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能:检测远程机器是否存活

target_ip='47.104.178.202'
echo -e "\033[32m检测的机器: $target_ip \033[0m"

loss_packet_rate=`ping -c2 $target_ip | grep 'packet' | awk -F ',' '{print $3}' | awk '{print substr($1,1,1)}'`

if [ $loss_packet_rate -eq 0 ];then
    echo "检测结果:机器正常"
elif [ $loss_packet_rate -lt 50 ];then
    echo "检测结果:机器不正常,丢包率: $loss_packet_rate"
else [ $loss_packet_rate -ge 50 ]
    echo "检测结果:机器宕机, 丢包率: $loss_packet_rate"
fi
checkMachineActive.sh

调试ping命令

ping -cn ip  # ping几次某台机器

编码并执行

2.检测服务是否正常(1)

检测Nginx

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能:检测Nginx服务是否正常

nginx_line=`netstat -lnp | grep nginx | wc -l`
cmd_restart_nginx="service nginx restart"

if [ $nginx_line -ne 0 ];then
    echo "Nginx服务正常"
else
    echo "Nginx服务不在,尝试重启中..."
    $cmd_restart_nginx
fi
checkNginxActive.sh

调试nginx命令

编码并执行

 

3.监控系统指标(3)

3.1 记录磁盘使用情况

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能:每天记录磁盘情况到文件

log_dir=/data/logs/disklog
log_file=$log_dir/`date +%F`.log   # 日期

# 目录存在性判断
if [ ! -d $log_dir ]
then
    mkdir -p $log_dir
fi

# 磁盘情况记录到日志文件
df -h | grep 'vda1' >> $log_file
checkDisk.sh

shell调试

编码并执行

3.2 监控CPU使用率

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能:监控CPU使用率,10秒一次
# 注意:处理小数运算(if []内只能进行整数间的运算)

compare_numbers(){
    # 比较两个小数的大小,is_gt=0代表大于,1代表小于
    is_gt=`awk -v num1=$1 -v num2=$2 'BEGIN{print(num1>num2)?0:1}'`
    echo $is_gt
}

check_cpu(){
    cpu_free_rate=`top -bn1  | head | grep Cpu | awk -F ',' '{ print substr($4, 2, 4) }'`
    cpu_use_rate=`awk -v var1=$cpu_free_rate 'BEGIN{print 100-var1 }'`  
    res=`compare_numbers $cpu_free_rate $cpu_use_rate`  # 比较小数

    if [ $res -eq 0 ];then
        echo "CPU使用率较为稳定: ${cpu_use_rate}%"
    else
        echo "CPU使用率偏高: ${cpu_use_rate}%"

    fi
}

while :
do
    check_cpu
    sleep 10
done
checkCpu.sh

调试top命令

第三行99.7%id代表CPU空闲率为99.7%

编码并执行

3.3 监控进程内存使用情况

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能: 统计所有进程占用内存总和

#!/bin/bash
std_ps=`ps aux | awk '{print $6}'`  # $n是一个数组

sum=0
for i in $std_ps
do
    let sum=$sum+$i/1024  #ps aux单位为K,换成M
done
echo "所有进程占用内存总和: ${sum}M"
checkMem.sh

调试ps命令

编码并执行

4.文件批处理(2)

4. 1 批量创建文件

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能: 批量创建文件

# ------------------函数定义------------------
create_file(){
# 在当前目录创建10个文件
filename="touch x.txt"  # $n是一个数组
sum=0
nums_1_10=`seq 1 10`
for i in $nums_1_10
do
    file_name=${filename/x/$i}
    echo $file_name
    $file_name
done
}

write_to_file(){
#给某个文件写入数据
      cat <<EOF >$1
hello
shell
EOF
}

create_dir(){
# 目录不存在则创建
    echo $1
    if [ ! -d $1 ];then
        mkdir $1
    fi
    cd $1    #进入testDir目录
}

# ------------------主逻辑------------------
# 在当前目录下创建一个目录testDir,testDir目录下继续创建:
#一个空目录、10个(其中文件1.txt写入hellop shell)
create_dir testDir
create_file
write_to_file 1.txt
mkdir emptyDir
mulkCtrateFiles.sh

调试函数create_file write_to_file

编码并执行

4.2 批量删除空文件

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能:删除指定目录下空文件和空目录

# 搜索空文件和空目录
find ./testDir -type f -size 0c -exec ls {} \;
find ./testDir -type d -empty 

# 删除空文件
find ./testDir -type f -size 0c -exec rm -f {} \;

# 删除空目录
find ./testDir -type d -empty -exec rm -rf {} \;
mulkDelEmptyFile.sh

调试find命令

编码并执行

5.日志文件处理(1)

统计IP访问情况

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能:统计每个IP访问量和IP总数

ip_access=`awk '{print $1}' /var/log/nginx/access.log | uniq -c`
ip_count=`awk '{print $1}' /var/log/nginx/access.log | uniq -c | wc -l`

echo "ip总数: $ip_count"
echo -e "每个IP访问量:\n$ip_access"
ip_access.sh

调试awk uniq wc 命令

查看日志数据

第一列:每个IP数,第二列:IP

统计IP总数

编码并执行

6.输入数字执行命令(2)

6. 1 输入数字执行普通命令

脚本运行在m1

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能: 输入一个数字,然后运行对应的一个命令

#!/bin/bash
echo "输入数字"
read -p "Please input a number: " num

if [ -z num ]
then
    echo "输入为空"
    exit
fi

case $num in 
    1)
        date
        ;;
    2)
        ls
        ;;
    3)
        who
        ;;
    4)
        pwd
        ;;
    *)
    echo "请输入1-4的数字"
        ;;
esac
inputExeCmd
编码并执行

6. 2 输入数字执行函数

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能: 输入一个数字,然后运行对应的一个函数


# -------------------- 函数定义 --------------------
checkNginxActive(){
# 检测Nginx服务是否正常
    nginx_line=`netstat -lnp | grep nginx | wc -l`
    cmd_restart_nginx="service nginx restart"

    if [ $nginx_line -ne 0 ];then
        echo "Nginx服务正常"
    else
        echo "Nginx服务不在,尝试重启中..."
        $cmd_restart_nginx
    fi
}

checkMachineActive(){
# 检测远程机器是否存活
    target_ip='47.244.191.206'
    echo -e "\033[32m检测的机器: $target_ip \033[0m"

    loss_packet_rate=`ping -c2 $target_ip | grep 'packet' | awk -F ',' '{print $3}' | awk '{print substr($1,1,1)}'`

    if [ $loss_packet_rate -eq 0 ];then
        echo "检测结果:机器正常"
    elif [ $loss_packet_rate -lt 50 ];then
        echo "检测结果:机器不正常,丢包率: $loss_packet_rate"
    else [ $loss_packet_rate -ge 50 ]
        echo "检测结果:机器宕机, 丢包率: $loss_packet_rate"
    fi
}

# -------------------- 主逻辑 --------------------
echo "输入数字"
echo "1:检测Nginx服务是否正常"
echo "2:检测远程机器是否存活"
read -p "Please input a number: " num

if [ -z num ]
then
    echo "输入为空"
    exit
fi

case $num in 
    1)
        checkNginxActive
        ;;
    2)
        checkMachineActive
        ;;
    *)
    echo "请输入1-4的数字"
        ;;
esac

imputExeFunction.sh
imputExeFunction.sh

7.获取系统信息(1)

脚本运行在m2

#!/bin/bash
# qq:598779784
# author:ecithy
# 功能:获取机器CPU核、内存、磁盘

# -------------------- 函数定义 --------------------
GetSysInfo(){
# 检测Nginx服务是否正常
    cpu_cores=`lscpu | awk '/^CPU\(s\):/{print $2}'`
    mem_size=`free -h | awk '/Mem/{print $2}'`
    disk_size=`df -h | awk '/^\/dev/{print $2}'`
    
    echo -e "CPU核:$cpu_cores\n内存:$mem_size\n磁盘:$disk_size"
    
}

# -------------------- 主逻辑 --------------------
GetSysInfo
GetSysInfo

调试命令

编码并执行

 

转载于:https://www.cnblogs.com/hyit/articles/11169462.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值