Shell基础-5

Tutorial: Shell基础 Category: Shell Published: 2026-04-07 13:58:25 Views: 23 Likes: 0 Comments: 0

Shell 基础-5

  1. 生成秘钥文件
#!/bin/bash
# -t 指定 SSH 密钥的算法为 RSA 算法;
# -N 设置密钥的密码为空;-f 指定生成的密钥文件存放在哪里

rm -rf ~/.ssh/{known_hosts,id_rsa*}
ssh-keygen -t RSA -N '' -f ~/.ssh/id_rsa

  1. 检查软件包是否安装
#!/bin/bash

if [ $# -eq 0 ]; then
    echo "你需要制定一个软件包名称作为脚本参数"
    echo "用法:$0 软件包名称 ..."
fi

# $@提取所有的位置变量的值, 相当于$*
for package in "$@"; do
    if rpm -q ${package} &>/dev/null; then
        echo -e "${package}\e[32m 已经安装\e[0m"
    else
        echo -e "${package}\e[34;1m 未安装\e[0m"
    fi
done

  1. 使用 curl 监控 http 返回码
#!/bin/bash

#设置变量,url 为你需要检测的目标网站的网址(IP 或域名)
url=http://192.168.4.5/index.html

# 定义函数 check_http:
# 使用 curl 命令检查 http 服务器的状态
# -m 设置 curl 不管访问成功或失败,最大消耗的时间为 5 秒,5 秒连接服务为相应则视为无法连接
# -s 设置静默连接,不显示连接时的连接速度、时间消耗等信息
# -o 将 curl 下载的页面内容导出到/dev/null(默认会在屏幕显示页面内容)
# -w 设置 curl 命令需要显示的内容%{http_code},指定 curl 返回服务器的状态码

check_http() {
    status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
}

while :; do
    check_http
    if [ $status_code -ne 200 ]; then
        date=$(date +%Y%m%d-%H:%M:%S)
        #生成报警邮件的内容
        echo "当前时间为:$date $url 服务器异常,状态码为${status_code}.请尽快排查异常." >/tmp/http$.pid
        #指定测试服务器状态的函数,并根据返回码决定是发送邮件报警还是将正常信息写入日志
        mail -s Warning root </tmp/http$.pid
    else
        echo "$url 连接正常" >>/var/log/http.log
    fi
    sleep 5
done

  1. 防火墙简单操作
#!/bin/bash

# 设置变量定义需要添加到防火墙规则的服务和端口号
# 使用 firewall-cmd --get-services 可以查看 firewall 支持哪些服务

service="nfs http ssh"
port="80 22 8080"

# 循环将每个服务添加到防火墙规则中
for i in $service; do
    echo "Adding $i service to firewall"
    firewall-cmd --add-service=${i}
done

# 循环将每个端口添加到防火墙规则中
for i in $service; do
    echo "Adding $i Port to firewall"
    firewall-cmd --add-port=${i}/tcp
done

# 将以上设置的临时防火墙规则,转换为永久有效的规则(确保重启后有效)
firewall-cmd --runtime-to-permanent

  1. 自动创建逻辑卷
#!/bin/bash

# 清屏,显示警告信息,创建将磁盘转换为逻辑卷会删除数据
clear
echo -e "\033[32m!!!!!!警告(Warning)!!!!!!\033[0m"
echo
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo "脚本会将整个磁盘转换为 PV,并删除磁盘上所有数据!!!"
echo "This Script will destroy all data on the Disk"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++"
echo

read -p "请问是否继续 y/n?:" sure
[ $sure != y ] && exit
read -p "请输入磁盘名称,如/dev/vdb:" disk
[ -z $disk ] && echo "没有输入磁盘名称" && exit
read -p "请输入卷组名称:" vg_name
[ -z $vg_name ] && echo "没有输入卷组名称" && exit
read -p "请输入逻辑卷名称:" lv_name
[ -z $lv_name ] && echo "没有输入逻辑卷名称" && exit
read -p "请输入逻辑卷大小:" lv_size
[ -z $lv_size ] && echo "没有输入逻辑卷大小" && exit

# 使用命令创建逻辑卷
pvcreate $disk
vgcreate $vg_name $disk
lvcreate -L ${lv_size}M -n ${lv_name} ${vg_name}