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