synchronization
Some checks failed
continuous-integration/drone Build is failing

This commit is contained in:
2025-08-25 15:57:40 +08:00
commit cee91802b3
106 changed files with 9124 additions and 0 deletions

284
File/Shell/Check_command.sh Normal file
View File

@@ -0,0 +1,284 @@
#!/bin/bash
#############################################################################################
# 用途: 提供一些常用的函数,拱其他脚本调用
# 作者: 丁辉
# 编写时间: 2023-11-27
#############################################################################################
# 加载检测脚本
# source <(curl -sS https://gitee.com/offends/Shell/raw/main/Check_command.sh)
# 定义颜色
RED='\033[0;31m'
NC='\033[0m'
GREEN='\033[32m'
YELLOW='\033[33m'
# 定义时间格式
TIME="+%Y-%m-%d %H:%M:%S"
# 定义函数 send_info
function SEND_INFO() {
info=$1
echo -e "${GREEN}$(date "$TIME") INFO: $info${NC}"
}
# 定义函数 send_warn
function SEND_WARN() {
warn=$1
echo -e "${YELLOW}$(date "$TIME") WARN: $warn${NC}"
}
# 定义函数 send_error
function SEND_ERROR() {
error=$1
echo -e "${RED}$(date "$TIME") ERROR: $error${NC}"
}
# print输出绿色字体
function GREEN_PRINTF() {
info=$1
printf "${GREEN}$(date "$TIME") INFO: $info${NC}\n"
}
# 打印系统信息
function FUNC_PRINT_SYSTEM_INFO() {
# 获取系统信息
CENTOS_VERSION=$(cat /etc/os-release | grep PRETTY_NAME= | awk -F '"' '{print $2}')
KERNEL_VERSION=$(uname -a | awk '{print $3}')
CPU_MODEl=$(cat /proc/cpuinfo | grep 'model name' | head -1 | awk -F ':' '{print $2}' | sed 's#^[ \t]*##g')
CPU_CORE=$(grep -c "processor" /proc/cpuinfo)
MEMORY_SIZE=$(free -h | awk '/Mem/ {print $2}')
# 打印系统信息
SEND_INFO "欢迎使用阿辉的脚本"
SEND_INFO "当前系统信息如下: "
SEND_INFO "=========================================================="
SEND_INFO "服务器架构: $(arch)"
SEND_INFO "系统版本: ${CENTOS_VERSION}"
SEND_INFO "内核版本: ${KERNEL_VERSION}"
SEND_INFO "内存大小: ${MEMORY_SIZE}"
SEND_INFO "处理器核数: ${CPU_CORE}"
SEND_INFO "处理器型号: ${CPU_MODEl}"
SEND_INFO "=========================================================="
}
# 检查服务器系统版本
function CHECK_OS() {
FWQ_NAME=$(cat /etc/os-release | grep '^NAME' | awk -F '"' '{print $2}')
if [[ $FWQ_NAME == "CentOS Linux" ]] || [[ $FWQ_NAME == "CentOS Stream" ]];then
OS=centos
OS_VERSION=$(cat /etc/os-release | grep -oP 'VERSION_ID="\K[^"]+' | cut -d '.' -f 1)
elif [[ $FWQ_NAME == "Debian GNU/Linux" ]];then
OS=debian
OS_VERSION=$(cat /etc/issue | awk -F ' ' '{print $3}')
elif [[ $FWQ_NAME == "Ubuntu" ]];then
OS=ubuntu
OS_VERSION=$(cat /etc/os-release | grep VERSION_ID= | grep -oE '[0-9]+\.[0-9]+' | cut -d'.' -f1)
else
SEND_ERROR "无法识别的系统版本"
exit 1
fi
}
# 判断服务器架构
function CHECK_CPU() {
if [ $(arch) = "x86_64" ] || [ $(arch) = "amd64" ]; then
ARCH_TYPE_1=x86_64
ARCH_TYPE_2=amd64
elif [ $(arch) = "aarch64" ] || [ $(arch) = "arm64" ]; then
ARCH_TYPE_1=aarch64
ARCH_TYPE_2=arm64
elif [ $(arch) = "i386" ]; then
ARCH_TYPE=x86_64
ARCH_TYPE_2=amd64
else
SEND_ERROR "无法识别的系统架构: $(arch)"
exit 1
fi
}
# 启动内核更新脚本
function CHECK_CORE(){
# 询问是否需要升级内核
read -p "是否需要升级内核 [Y/n]" is_core
case $is_core in
[yY][eE][sS]|[yY])
curl -sLO https://gitee.com/offends/Offends/raw/main/Shell/Core.sh
chmod +x Core.sh
./Core.sh $@
;;
[nN][oO]|[nN])
SEND_INFO "跳过内核更新"
;;
"")
SEND_ERROR "值不能为空,请重新输入"
;;
*)
SEND_ERROR "输入错误,请重新输入"
CHECK_CORE
;;
esac
}
# 检查服务器网络连接
function CHECK_NETWORK() {
SEND_INFO "正在检查网络连接"
PING=$(ping -c 3 www.baidu.com | grep 'icmp_seq' | wc -l)
if [[ ${PING} -eq 0 ]];then
SEND_ERROR "网络连接失败,请检查网络连接"
exit 1
fi
}
# 检测文件是否存在
function CHECK_FILE(){
if [ ! -f "$@" ]; then
SEND_ERROR "$@ 文件不存在"
exit 1
fi
}
# 检测文件是否存在(多文件情况)
function CHECK_FILES(){
shopt -s nullglob
for file in "$@"; do
if [ ! -f "$file" ]; then
SEND_ERROR "$file 文件不存在"
exit 1
fi
done
}
# 检测目录是否存在,不存在则创建
function CHECK_DIR(){
if [ ! -d "$@" ]; then
mkdir -p "$@" > /dev/null 2>&1 || true
fi
}
# 检测固定位置的二进制文件是否存在
function CHECK_BIN(){
if [ ! -f "$@" ]; then
INSTALL_BIN=false
fi
}
# 检测命令是否执行正确,正确则输出$1,错误则输出$2并退出脚本
function CHECK_COMMAND_TRUE() {
if [ $? -eq 0 ]; then
SEND_INFO "$1"
else
SEND_ERROR "$2"
exit 1
fi
}
# 判断用户是否存在,不存在则创建
function CHECK_USER(){
if ! id -u "$@" >/dev/null 2>&1; then
useradd -m -s /bin/bash --no-user-group "$@" > /dev/null 2>&1 || true
fi
}
# 判断用户组是否存在,不存在则创建
function CHECK_GROUP(){
if ! grep -q "$@" /etc/group; then
groupadd "$@" > /dev/null 2>&1 || true
fi
}
# 用户加入组
function ADD_USER_GROUP(){
CHECK_USER "$1"
CHECK_GROUP "$2"
if ! id -nG "$1" | grep -qw "$2"; then
SEND_INFO "正在将用户 $1 加入用户组 $2"
usermod -aG "$2" "$1" > /dev/null 2>&1 || true
fi
id "$1" || true
}
# 定义输出为空,并且失败不会退出脚本
function NULL_TRUE(){
eval "$*" > /dev/null 2>&1 || true
}
# 失败不会退出脚本,输出命令执行结果
function NULL_TRUE_ECHO(){
eval "$*" || true
}
# 检测命令是否执行成功,不输出命令执行结果
function CHECK_COMMAND_NULL() {
# 执行传入的命令
eval "$*" > /dev/null 2>&1
# 检查命令执行状态
if [ $? -ne 0 ]; then
SEND_ERROR "执行失败, 退出脚本, 请检查命令是否正确: $*"
exit 1
fi
}
# 检测命令是否执行成功,输出命令执行结果
function CHECK_COMMAND_ECHO() {
# 执行传入的命令
eval "$*"
# 检查命令执行状态
if [ $? -ne 0 ]; then
SEND_ERROR "执行失败, 退出脚本, 请检查命令是否正确: $*"
exit 1
fi
}
# 网络安装软件
function CHECK_INSTALL() {
# 接收传递给脚本的参数列表
packages=("$@")
log_file="/tmp/check_install_log" # 定义日志文件路径
for pkg in "${packages[@]}"; do
if command -v yum >/dev/null 2>&1; then
SEND_INFO "正在安装 $pkg,请稍后"
yum install -y "$pkg" >>"$log_file" 2>&1
if [ $? -ne 0 ]; then
SEND_ERROR "安装 $pkg 失败,请查看日志"
tail -n 10 "$log_file" # 输出最后10行日志
rm -rf $log_file
exit 1
fi
elif command -v apt >/dev/null 2>&1; then
SEND_INFO "正在安装 $pkg,请稍后"
apt-get install -y "$pkg" >>"$log_file" 2>&1
if [ $? -ne 0 ]; then
SEND_ERROR "安装 $pkg 失败,请查看日志"
tail -n 10 "$log_file" # 输出最后10行日志
rm -rf $log_file
exit 1
fi
else
SEND_ERROR "无法识别的系统软件包管理工具"
exit 1
fi
done
}
# 检测某个systemd服务是否存在
function CHECK_SYSTEMD(){
if ! command -v $@ >/dev/null 2>&1; then
SEND_ERROR "错误,请检查 $@ 是否安装"
exit 1
else
SEND_INFO "$@ 服务已安装"
if ! systemctl status $@ >/dev/null 2>&1; then
SEND_WARN "$@ 服务未启动,正在启动 $@ 服务"
if ! systemctl start $@ >/dev/null 2>&1; then
SEND_ERROR "$@ 服务启动失败,请检查 $@ 服务"
exit 1
fi
fi
fi
}