Bash: переменная не используется / определена правильно - PullRequest
0 голосов
/ 29 сентября 2019

работает над моим скриптом автоустановки.Моя переменная не используется должным образом, журнал отладки выглядит следующим образом.

Я пробовал несколько вариантов, используя «» вместо «», не используя «» или «», а только переменную $.Сценарий выглядит так:

echo "Creating Apache2 VHost and Wordpress blog $domain"

VAR1=$sitealias
VAR2=$domain
MOREF=$`pwgen 14 1`
echo $MOREF is SQL password.

mkdir /var/www/"$domain"
chown -R www-data:www-data /var/www/"$domain"
echo "<VirtualHost *:80>
    ServerName myblog.example.com

    ServerAdmin webmaster@example.com
    DocumentRoot /usr/share/wordpress

    Alias /wp-content /var/lib/wordpress/wp-content
    <Directory /usr/share/wordpress>
        Options FollowSymLinks
        AllowOverride Limit Options FileInfo
        DirectoryIndex index.php
        Require all granted
    </Directory>
    <Directory /var/lib/wordpress/wp-content>
        Options FollowSymLinks
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
" > /etc/apache2/sites-available/$domain.conf

mysqladmin -u root password supersecretpassword create wp_$sitealias
mysqladmin -u root password supersecretpassword CREATE USER     $sitealias@'localhost' IDENTIFIED BY '$MOREF';
mysqladmin -u root password supersecretpassword GRANT ALL PRIVILEGES ON   wp_'$sitealias.'* TO '$sitealias'@localhost;
FLUSH PRIVILEGES;
quit         

Сценарий должен вставить переменную в команды, каталоги папок.Вместо этого переменная просто игнорируется, как показано в журнале отладки.

ОБНОВЛЕНИЕ:

Теперь захват переменных работает нормально.Однако SQL не нравится ваша двойная кавычка (скопируйте и вставьте их)

root@hosting:/bin# hello.sh letstest.tld testtesttdjsuqwu
Creating Apache2 VHost and Wordpress blog 
qui2AenaihoQu9 is SQL password.
mysqladmin: Unknown command: 'create wp_testtesttdjsuqwu'
mysqladmin: Unknown command: 'CREATE USER   'testtesttdjsuqwu'@'localhost' IDENTIFIED BY 'q'
mysqladmin: Unknown command: 'GRANT ALL PRIVILEGES ON wp_testtesttdjsuqwu.*  TO 'testtesttd'
/bin/hello.sh: line 37: FLUSH: command not found
/bin/hello.sh: line 38: quit: command not found

1 Ответ

0 голосов
/ 29 сентября 2019

Если вы хотите использовать параметры внутри вашего скрипта (основываясь на комментариях выше, 'domain' и 'sitealias'), используйте '$ 1' '$ 2', чтобы захватить их

domain=$1
sitealias=$2
# Fixed quoting of pwgen)
MOREF=$(pwgen 14 1)
# Rest of the script here, using $domain, $sitealias
echo $MOREF is SQL password.

mkdir /var/www/"$domain"

Это не полностьюУкажите, какое значение вы хотите присвоить APACHE_LOG_DIR.Предполагая, что эта переменная должна быть разрешена во время выполнения на основе значения по умолчанию Apache, вы хотите использовать одинарную кавычку вместо двойной кавычки для оператора 'echo'.Это задержит разрешение этой переменной.

echo '<VirtualHost *:80>
    ServerName myblog.example.com

    ServerAdmin webmaster@example.com
    DocumentRoot /usr/share/wordpress

    # Lines removed for

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
' > /etc/apache2/sites-available/$domain.conf

Кроме того, рассмотрите двойные кавычки для команды установки mysqladmin.Используйте двойные кавычки, чтобы включить подстановку переменных, Используйте одинарные кавычки, когда это необходимо для mysql.

mysqladmin -u root password supersecretpassword "create wp_$sitealias"
mysqladmin -u root password supersecretpassword "CREATE USER  '$sitealias'@'localhost' IDENTIFIED BY '$MOREF'";
mysqladmin -u root password supersecretpassword "GRANT ALL PRIVILEGES ON wp_$sitealias.* TO '$sitealias'@'localhost';"
FLUSH PRIVILEGES;
quit   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...