有人可以帮助我吗?我不知道问题出在哪里?
./menu.sh:第 268 行:查找匹配的“”时出现意外的 EOF
./menu.sh:第 271 行:语法错误:意外的文件结尾
submenuFTP () {
local PS3='Please enter option: '
local options=( "Install vsftp" "create ftp user" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install vsftp")
./vsftp/vsftp_install.sh
;;
"Create ftp user")
./vsftp/create_ftp.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuDatabase () {
local PS3='Please enter option: '
local options=("MySQL" "MariaDB" "MongoDB" "Postgres" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install MySQL ")
./Database/mysql.sh
;;
"Install MariaDB")
./Database/mariadb.sh
;;
"Install MongoDB")
./Database/mongodb.sh
;;
"Install Postgres")
./Database/postgres.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuEmail () {
local PS3='Please enter option: '
local options=("Install postfix" "Install anti-spam" "Install anti-virus" "Add domaine" "Add user mail" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install postfix")
./mail/postfix_install.sh
;;
"Install anti-spam")
./mail/spamassassin_install.sh
;;
"Install anti-virus")
./mail/clamAV_install.sh
;;
"Add domaine")
./mail/add_domain.sh
;;
"Add user mail")
./mail/add_user.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuawstats () {
local PS3='Please enter option: '
local options=("Install awstats" "Add domain awstats" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install awstats")
./Monitoring/awstats_install.sh
;;
"Add domain awstats")
./Monitoring/awstats_add_domaine.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuprestashop () {
local PS3='Please enter option: '
local options=("Install prestashop" "Add domain prestashop" Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install prestashop")
./Monitoring/prestashop_install.sh
;;
"Add domain prestashop")
./Monitoring/prestashop_add_domaine.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuMonitoring () {
local PS3='Please enter option: '
local options=( "Use awstats" "Use prestashop" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Use awstats")
submenuawstats
;;
"Use prestashop")
submenuprestashop
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuSecurity () {
local PS3='Please enter option: '
local options=("Install certbot" "Secure web page" "Secure mail" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install certbot")
./certbot/certbot_install.sh
;;
"Secure web page")
./certbot/certbot_web.sh
;;
"Secure mail")
./certbot/certbot_mail.sh
;;
"Secure FTP")
./certbot/certbot_FTP.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuwebserver () {
local PS3='Please enter option: '
local options=("Install Nginx" "Create web page" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install Nginx ")
./serverWeb/nginx_install.sh
;;
"Create web page")
./serverWeb/nginx_add_page.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuDNS () {
local PS3='Please enter option: '
local options=("Install PowerDNS" "Add domaine" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install PowerDNS")
./DNS/power_install.sh
;;
"Add domaine")
echo "you chose sub item 1"
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
submenuCron () {
local PS3='Please enter option: '
local options=("Install Cron" "Add domaine" "Return to menu")
local opt
select opt in "${options[@]}"
do
case $opt in
"Install Cron")
./cron/install_cron.sh
;;
"Add cron job for database")
./cron/cron_database.sh
;;
"Add cron job for nginx")
./cron/cron_nginx.sh
;;
"Add cron job for awstats")
./cron/cron_awstats.sh
;;
"Add cron job for certbot")
./cron/cron_certbot.sh
;;
"Return to menu")
return
;;
*) echo "invalid option $REPLY";;
esac
done
}
# main menu
local PS3='Please enter option: '
options=("File manager" "Databases" "Email" "Monitoring" "Security" "Web server" "Web server" "Cron job" "DNS server" "Main menu quit")
select opt in "${options[@]}"
do
case $opt in
"File manager")
submenuFTP
;;
"Databases")
submenuDatabase
;;
"Email")
submenuEmail
;;
"Monitoring")
submenuMonitoring
;;
"Security")
submenuSecurity
;;
"Web server")
submenuwebserver
;;
"DNS server")
submenuDNS
;;
"Cron job")
submenuCron
;;
"Main menu quit")
exit
;;
*) echo "invalid option $REPLY";;
esac
完成第 268 行和第 171 行后:
268 *) echo "invalid option $REPLY";;
269 esac
270 done
271
答案1
./menu.sh:第 268 行:查找匹配的“”时出现意外的 EOF
local options=("Install prestashop" "Add domain prestashop" Return to menu")
"
之前缺少一个引文Return
。
注意你可以使用ShellCheck – shell脚本分析工具检查 bash 脚本中的错误。