0

我正在研究看起来像这样的 bash 脚本。这个想法是:创建脚本,该脚本将创建 mysql 用户、数据库并为新创建的数据库授予该用户的所有权限。

    SED=`which sed`
CURRENT_DIR=`dirname $0`

if [ -z $1 ]; then
    echo "No domain name given"
    exit 1
fi
DOMAIN=$1

# check the domain is valid!
PATTERN="^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
if [[ "$DOMAIN" =~ $PATTERN ]]; then
    DOMAIN=`echo $DOMAIN | tr '[A-Z]' '[a-z]'`
    echo "Creating hosting for:" $DOMAIN
else
    echo "invalid domain name"
    exit 1 
fi

   echo "Do you want to create MySQL DB for Website (Y/n)?"
read CREATEDB

if [[ ( $CREATEDB == "y" ) || ( -z "$CREATEDB" ) ]]; then
    echo "Enter MySQL root login (leave blank for default value - root):"
    read MYSQLLOGIN 
    if [ -z "$MYSQLLOGIN" ]; then
        MYSQLLOGIN="root"
    fi
    echo "Enter MySQL root PASS:"
    read MYSQLROOTPASS
    if [ -z "$MYSQLROOTPASS" ]; then
        echo "No way without pass"
        exit 1
    fi
    echo "Enter DB name (leave blank for default value - username_db):" 
    read MYSQLDB
    if [ -z "$MYSQLDB" ]; then
        MYSQLDB=$USERNAME"_db"
    fi
    echo "Enter password for newly created MySQL user (!ONLY if you have pwgen - sudo apt-get install pwgen! leave blank for auto password creation):"
    read MYSQLPASS
    if [ -z "$MYSQLPASS" ]; then
        MYSQLPASS=$(pwgen -acn 10 1)
    fi
    mysql -h localhost -u $MYSQLLOGIN -p$MYSQLROOTPASS;
    mysql> CREATE USER $USERNAME@'localhost' IDENTIFIED BY $MYSQLPASS;
    mysql> create database $MYSQLDB;
    mysql> grant usage on *.* to $USERNAME@localhost identified by $MYSQLPASS;
    mysql> grant all privileges on $MYSQLDB.* to $USERNAME@localhost ;
else
exit 1
fi

echo -e "\nSite Created for $DOMAIN with PHP support\n Domain: "$DOMAIN"\n MySQL DB Name: "$MYSQLDB"\nMySQL Username : Pass"$USERNAME" : "$MYSQLPASS ;

我究竟做错了什么?收到以下错误:

在此处输入图像描述

4

2 回答 2

4

错误出现在突出显示的行中:

    if[$MYSQLDB==""]; then

您需要在 周围留出空格[]并且==操作员说:

    if [ $MYSQLDB == "" ]; then

其他地方也存在同样的问题。例如,你说:

if [$CREATEDB == "y"]; then
if[$MYSQLLOGIN==""]; then
if[$MYSQLPASS==""]; then

此外,以下内容将不起作用:

mysql -h localhost -u $MYSQLLOGIN -p$MYSQLROOTPASS;
mysql> CREATE USER $USERNAME@'localhost' IDENTIFIED BY $MYSQLPASS;
mysql> create database $MYSQLDB;
mysql> grant usage on *.* to $USERNAME@localhost identified by $MYSQLPASS;
mysql> grant all privileges on $MYSQLDB.* to $USERNAME@localhost ;

您需要使用heredoc

于 2013-10-13T09:43:55.493 回答
2

线

if[$MYSQLLOGIN==""]; then

至少有以下语法错误:

  • 它需要if和之间有一个空格[-if[不是有效的 bash 语法

  • -需要一个空格(当为空时)不是有效命令[[==MYSQLLOGIN

  • 前面需要一个空格]

  • 我认为它还需要在变量周围加上双引号,以防止输入文本出现问题:"$MYSQLLOGIN"

所以正确的版本是:

if [ "$MYSQLLOGIN" == "" ]; then

同样的错误也会在代码的其他部分重复出现,因此您也必须修复这些错误。

于 2013-10-13T09:44:16.767 回答