编写一个配置ip地址和修改主机名的脚本,并完成菜单里的功能,菜单如下:
1.配置主机名
2.配置ip
3.查看ip和主机名
4.退出
配置ip地址如果不成功,要求回滚到原来的ip地址,配置成功后,显示ip地址给用户看,要求尽可能的多些交互
ip地址输入后需要使用正则去判断是否合法,不合法的ip地址,要求重新输入。
配置主机名要求修改配置文件,永久有效,而且也要求临时有效。
#!/bin/bash
# 配置主机名
set_hostname() {
read -p "请输入主机名: " host_name
if hostnamectl set-hostname "${host_name}"; then
echo "主机名已更改为 ${host_name}"
else
echo "更改主机名失败"
fi
}
# 配置IP地址
set_ip() {
local original_ip=$(grep '^IPADDR=' /etc/sysconfig/network-scripts/ifcfg-ens33 | cut -d'=' -f2)
local myip
until [[ $(echo "$myip" | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$') ]]; do
read -p "请输入一个合法的IP地址(例如:192.168.1.1): " myip
if ! [[ $(echo "$myip" | grep -E '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$') ]]; then
echo "输入的IP地址不合法,请重新输入。"
fi
done
sed -i "/^IPADDR=/c\IPADDR=$myip" /etc/sysconfig/network-scripts/ifcfg-ens33
if systemctl restart network; then
echo "IP地址已更改为 $myip"
else
sed -i "/^IPADDR=/c\IPADDR=$original_ip" /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network
echo "配置IP地址失败,已回滚到原始IP地址 $original_ip"
fi
}
# 查看IP和主机名
get_ip_hostname() {
echo "主机名是 $(hostname)"
local get_ip=$(ip addr show ens33 | grep 'inet ' | awk '{print $2}' | cut -d'/' -f1)
echo "IP地址是 $get_ip"
}
# 菜单函数
menu() {
echo "1. 配置主机名"
echo "2. 配置IP"
echo "3. 查看IP和主机名"
echo "4. 退出"
read -p "请输入你的选择: " option
}
# 主逻辑
while true; do
menu
case $option in
1)
set_hostname
;;
2)
set_ip
;;
3)
get_ip_hostname
;;
4)
exit
;;
*)
echo "请输入1-4之间的数字"
;;
esac
done
IP地址合法性检查:使用了一个简单的正则表达式来检查输入的IP地址是否合法。
IP地址回滚:在修改IP地址之前,脚本会保存原始的IP地址。如果新IP地址配置失败(通过重启网络服务检查),脚本会回滚到原始IP地址。
网络配置文件路径:根据常见的CentOS/RHEL配置,我将IP配置文件路径更改为/etc/sysconfig/network-scripts/ifcfg-ens33。如果使用的是其他Linux发行版,可能需要相应地更改此路径。
重启网络服务:在修改IP地址后,脚本尝试重启网络服务来应用更改。根据您的系统配置,这可能需要不同的命令(例如,在某些系统上可能是ifdown ens33 && ifup ens33)。
菜单循环:我添加了一个while true循环来使菜单在每次操作后重新显示,直到用户选择退出。
Python脚本:由于主要请求是Bash脚本,因此Python脚本部分未在此回答中进一步扩展。但是,可以按照类似的逻辑在Python脚本中使用subprocess模块来执行系统命令。
cpu,disk监控脚本
shell脚本
#!/bin/bash
log_path="/var/log/"
logfile="cpu_disk.log"
# 获取CPU使用率
cpu_idle=$(top -bn 1 | awk '/^%Cpu/{print $8}')
cpu_used=$(echo "100 - $cpu_idle" | bc)
if [ $cpu_used -ge 70 ]; then
echo "Warning: CPU使用率高于70%, 请管理员及时查看。" >> $log_path$logfile
else
echo "CPU使用率正常。"
fi
# 获取磁盘使用率(这里以根分区为例)
root_part_percent=$(df -Th | awk '/\/$/{print $(NF-1)}' | tr -d "%")
if [ $root_part_percent -ge 80 ]; then
echo "警告:根分区使用率高于80%,目前使用率是 $root_part_percent%。" >> $log_path$logfile
else
echo "根分区使用率正常。"
fi
python脚本
# monitor_cpu_disk.py
import psutil
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s',
filename='cpu_usage.log',
filemode='a')
cpu_usage = psutil.cpu_percent(interval=1)
if cpu_usage >= 70:
logging.warning(f"Warning: CPU使用率高于70%, 目前的使用率为{cpu_usage}%")
else:
logging.info("CPU使用率正常。")
# monitor_disk.py
import psutil
partitions = psutil.disk_partitions()
for partition in partitions:
usage = psutil.disk_usage(partition.mountpoint)
percent_used = (usage.used / usage.total) * 100
if percent_used >= 80:
print(f"警告:分区 {partition.device} 在 {partition.mountpoint} 的使用率高于80%,当前使用率为 {percent_used:.2f}%")
一键安装nginx,一键卸载nginx脚本
#!/bin/bash
# 安装依赖包
yum install gcc pcre-devel openssl-devel -y
# 新建用户
id caojie || useradd caojie
# 下载和解压Nginx源码
mkdir -p /nginx
cd /nginx
curl -O https://nginx.org/download/nginx-1.25.5.tar.gz
tar xf nginx-1.25.5.tar.gz
cd nginx-1.25.5
# 编译安装
./configure --prefix=/usr/local/caojie --user=caojie --group=caojie --with-http_ssl_module --with-http_v2_module --with-stream
if [ $? -ne 0 ]; then
echo "编译配置出错,请检查。"
exit 1
fi
make -j 2
make install
# 设置PATH变量
echo "PATH=/usr/local/caojie/sbin/:$PATH" >> /etc/bashrc
source /etc/bashrc
# 启动Nginx并设置开机启动
/usr/local/caojie/sbin/nginx && echo "Nginx启动成功" || echo "Nginx启动失败"
echo "/usr/local/caojie/sbin/nginx" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
setenforce 0
#!/bin/bash
# 停止Nginx服务
/usr/local/caojie/sbin/nginx -s stop
# 删除PATH变量里的相关路径
sed -i '/\/usr\/local\/caojie\/sbin\//d' /etc/bashrc
source /etc/bashrc
# 删除Nginx目录
rm -rf /usr/local/caojie
# 删除开机启动项
sed -i '/\/usr\/local\/caojie\/sbin\/nginx/d' /etc/rc.d/rc.local
数据库备份脚本
#!/bin/bash
# 数据库配置
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="your_database_name"
BACKUP_DIR="/path/to/your/backup/directory"
DATE=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$BACKUP_DIR/$DB_NAME-$DATE.sql"
# 创建备份目录(如果不存在)
mkdir -p "$BACKUP_DIR"
# 执行备份
mysqldump -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_FILE"
if [ $? -eq 0 ]; then
echo "Database backup successful: $BACKUP_FILE"
else
echo "Database backup failed"
fi
数据库操作脚本
#!/bin/bash
# 数据库配置
DB_HOST="localhost"
DB_USER="your_username"
DB_PASSWORD="your_password"
DB_NAME="your_database_name"
# SQL命令(示例:创建一个新表)
SQL_COMMAND="CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL);"
# 连接到MySQL并执行SQL命令
mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" -e "$SQL_COMMAND"
if [ $? -eq 0 ]; then
echo "SQL command executed successfully"
else
echo "SQL command execution failed"
fi