我是脚本新手,努力理解和学习它。我在使用脚本时遇到了问题,每当我尝试删除子域时,都会收到无法删除数据库的错误。我认为是一些变量问题,请帮忙。

我是脚本新手,努力理解和学习它。我在使用脚本时遇到了问题,每当我尝试删除子域时,都会收到无法删除数据库的错误。我认为是一些变量问题,请帮忙。

我是脚本新手,努力理解和学习它。我在使用脚本时遇到了问题,每当我尝试删除子域时,都会收到无法删除数据库的错误。我认为是一些变量问题,请帮忙。

/bin/bash #!/bin/bash

删除所有内容

设置-e

颜色

红色=$'\e[1;31m' 绿色=$'\e[1;32m' 黄色=$'\e[1;33m' 蓝色=$'\e[1;34m' 彩色=$'\e[1;35m' 青色=$'\e[1;36m' 结束=$'\e[0m'

变量。

域 = $1 db = $2 域 2 = $3 用户数据库 1 = $4 用户数据库 2 = $5 sitesEnable = '/etc/nginx/sites-enabled/' sitesAvailable = '/etc/nginx/sites-available/' domainRegex =“^[a-zA-Z0-9]”

检查你是否是root

if [ "$(whoami)" != 'root' ]; then echo "您无权以非 root 用户身份运行 $0。使用 sudo" exit 1; fi

要求用户添加域名

while true 明确

echo "" echo "${grn}按 [CTRL + C] 取消...${end}" echo "" echo "这里是您服务器上的所有域" echo "" echo "“ 回显“${blu}” ls -I default -I phpmyadmin -I filemanager -1 /etc/nginx/sites-enabled/ 回显“${end}

echo ""
echo "${yel}Please note, all data on your domain will be gone, proceed will caution!${end}"
echo ""
read -p ${grn}"Please provide domain to be deleted: ${end}: " domain
read -p ${grn}"Please type your domain one more time${end}: " domain2
echo
[ "$domain" = "$domain2" ] && break
echo "Domain you provide does not match, please try again!"
read -p "${grn}Press [Enter] key to continue...${end}" readEnterKey

完毕

直到 [[ $domain =~ $domainRegex ]] 执行 echo -n "输入有效域:" 读取域完成

检查域名是否不存在

FILE=/etc/nginx/sites-available/$domain file2=/var/www/$domain if [ -f "$FILE" ] || [ -f "$file2" ] ; then 清除 else echo "" echo "$domain 不存在,请重试" exit; fi

清除

删除数据库

domainClear=${domain//./} domainClear2=${domainClear//-/} mariadb <<MYSQL_SCRIPT DROP DATABASE database_$domainClear2; DROP USER 'user_$domainClear2'@'localhost'; MYSQL_SCRIPT 清除

删除域。

rm -fr /var/www/$domain 取消链接 /etc/nginx/sites-enabled/$domain rm -f /etc/nginx/sites-available/$domain rm -f /var/log/nginx/$domain.error.log rm -f /etc/php/7.3/fpm/pool.d/$domain.conf

删除 ssl。

rm -rf /etc/letsencrypt/live/$domain /etc/letsencrypt/renewal/$domain.conf /etc/letsencrypt/archive/$domain rm -rf /etc/ssl/$domain 服务 nginx 重新加载

删除缓存。

rm -rf /etc/nginx/mycache/$domain

systemctl reload nginx
clear
echo ""

回显“”

echo "" echo "域 $domain 已成功删除,数据库和 SSL!" rm -f /root/delete.sh exit

答案1

是的,我正确地创建了子域和数据库。我使用以下脚本创建了虚拟主机和数据库。

/bin/bash #!/bin/bash

添加子域名+创建数据库

设置-e

颜色

红色=$'\e[1;31m' 绿色=$'\e[1;32m' 黄色=$'\e[1;33m' 蓝色=$'\e[1;34m' mag=$'\e[1;35m' 青色=$'\e[1;36m' 结束=$'\e[0m' 红色="\e[0;91m" 蓝色="\e[0;94m" expand_bg="\e[K" 蓝色_bg="\e[0;104m${expand_bg}" 红色_bg="\e[0;101m${expand_bg}" 绿色_bg="\e[0;102m${expand_bg}" 绿色="\e[0;92m" 白色="\e[0;97m" 黄色="\e[0;33m" 紫色="\e[1;35m" 粗体="\e[1m" uline="\e[4m" reset="\e[0m"

检查你是否是root

if [ "$(whoami)" != 'root' ]; then echo "您无权以非 root 用户身份运行 $0。使用 sudo" exit 1; fi

变量

域 = $1 域 2 = $3 sitesEnable = '/etc/nginx/sites-enabled/' sitesAvailable = '/etc/nginx/sites-available/' domainRegex="^[a-zA-Z0-9]"

要求用户添加域名

虽然 true 确实

清除

echo ""

echo "${grn}按 [CTRL + C] 取消...${end}" echo ""

read -p ${grn}"请提供您的域名和子域名[例如,forum.domain.com]${end}: " domain read -p ${grn}"请再输入一次您的域名和子域名${end}: " domain2 echo [ "$domain" = "$domain2" ] && break echo "您提供的域名不匹配,请重试!" read -p "${grn}按 [Enter] 键继续...${end}" readEnterKey done

直到 [[ $domain =~ $domainRegex ]] 执行 echo -n "输入有效域:" 读取域完成

检查域名是否已添加

if [ -e $sitesAvailable$domain ]; then echo "该域名已经存在。请从主菜单选项中删除您的域名,然后重试" exit; fi

检查域名是否已添加 var www

如果 [ -e /var/www/$domain ]; 然后 echo "该域名已经存在。请从主菜单选项中删除您的域名,然后重试" exit; fi

创建数据库

echo -n“输入数据库的名称[例如,database_domain],然后按[ENTER]:”读取数据库

#检查数据库是否存在 DATABASE=/var/lib/mysql/$DB if [ -e $DATABASE ]; then echo "" echo "$DB 已存在于数据库中,请重试" exit; else echo "" fi

echo -n“输入数据库的用户名[例如,user_domain],然后按[ENTER]:”读取 USR

echo "" echo -n "输入新用户的密码 [例如,password123!@#_domain],然后按 [ENTER]: " read PASS

mysql -uroot <<MYSQL_SCRIPT 创建数据库 $DB;创建用户 '$USR'@'localhost',由 '$PASS' 标识;授予 $DB 上的所有权限。* 给 '$USR'@'localhost';刷新权限;MYSQL_SCRIPT

将域添加到服务器

mkdir /var/www/$domain

安装 ssl

mkdir -p /etc/ssl/$domain/ cd /etc/ssl/$domain/ openssl req -new -newkey rsa:2048 -sha256 -nodes -out $domain.csr -keyout $domain.key -subj "/C=US/ST=Rhode Island/L=East Greenwich/O=Fidelity Test/CN=$domain" openssl x509 -req -days 36500 -in $domain.csr -signkey $domain.key -out $domain.crt 服务 nginx 重新加载

将 html 文件添加到域名

if ! echo "域名已添加!" > /var/www/$domain/index.html then echo "创建 index.html 文件时出现错误" exit; else echo "index.html 已成功创建" fi chown -R $USER:$USER /var/www/$domain nginx -t systemctl reload nginx chown -R www-data:www-data /var/www/$domain systemctl restart php7.4-fpm.service systemctl restart nginx

为服务器添加缓存

mkdir -p /etc/nginx/mycache/$domain

为域名添加 nginx Vhost

configName=$domain cd $sitesAvailable wget vhost-fastcgi -O $domain sed -i "s/domain.com/$domain/g" $sitesAvailable$configName

PHP 池设置

wget -q $php7_dotdeb -O /etc/php/7.4/fpm/pool.d/$domain.conf sed -i "s/domain.com/$domain/g" /etc/php/7.4/fpm/pool.d/$domain.conf echo "" >> /etc/php/7.4/fpm/pool.d/$domain.conf dos2unix /etc/php/7.4/fpm/pool.d/$domain.conf > /dev/null 2>&1 服务 php7.4-fpm 重新加载

ln -s $sitesAvailable$configName $sitesEnable$configName nginx -t systemctl reload nginx

重启 nginx 和 php-fpm

echo "重新启动 Nginx 和 PHP-FPM ..." echo "" sleep 1 systemctl restart nginx systemctl restart php7.4-fpm.service clear

成功提示

回显“”

echo "完成!您的新 $domain 子域已添加!" echo " 请保存以下信息。" echo "MySQL 用户已创建。" echo "数据库:$DB" echo "用户名:$USR" echo "密码:$PASS" echo ""

echo "" #rm -f /root/domain3.sh 退出

答案2

当我使用上述脚本创建 vshot 和数据库时,我得到了如下的正确输出。

完成!您的新 test.example.com 子域名已添加!

请保存以下信息。MySQL 用户已创建。数据库:test_db 用户名:test_user 密码:test24689

相关内容