Назад | Перейти на главную страницу

Как я могу улучшить этот скрипт?

Мне было интересно, есть ли лучший способ создать файл, кроме добавления каждой строки в файл. Я сделал это так, чтобы сохранить удобочитаемость, однако отступов нет. Есть ли способ создать файл и ввести сразу несколько строк?

if [ -d "/srv/www/$1" ]; then
 echo "Domain name already exists!"
else 
 mkdir -p /srv/www/$1/public_html; 
 mkdir -p /srv/www/$1/logs; 
 echo "<VirtualHost>" > /etc/apache2/sites-available/$1
    echo "ServerAdmin support@$1" >> /etc/apache2/sites-available/$1
    echo "ServerName $1" >> /etc/apache2/sites-available/$1
    echo "ServerAlias www.$1" >> /etc/apache2/sites-available/$1
    echo "DocumentRoot /srv/www/$1/public_html/" >> /etc/apache2/sites-available/$1
    echo "ErrorLog /srv/www/$1/logs/error.log" >> /etc/apache2/sites-available/$1
    echo "CustomLog /srv/www/$1/logs/access.log combined" >> /etc/apache2/sites-available/$1
 echo "</VirtualHost>" >> /etc/apache2/sites-available/$1
 a2ensite $1

Используйте heredoc.

cat > /etc/apache2/sites-available/"$1" << EOF
<VirtualHost>
ServerAdmin support@$1
...
EOF

Heredoc, как указано в ответе №1, или пусть ваше эхо проходит через несколько строк.

echo "line 1
line2
line3" > file

Если вам нужна удобочитаемость, не рассматривали ли вы возможность разбить ее на несколько файлов? Имейте файл «шаблона», который вы можете редактировать, который копируется с помощью вашего сценария оболочки.

## /path/to/vhtemplate
<VirtualHost>
    ServerAdmin support@#1
    ServerName #1
    ServerAlias www.#1
    DocumentRoot /srv/www/#1/public_html/
    ErrorLog /srv/www/#1/logs/error.log
    CustomLog /srv/www/#1/logs/access.log combined
</VirtualHost>

Пример сценария:

if [ -d "/srv/www/$1" ]; then
 echo "Domain name already exists!"
else 
 mkdir -p /srv/www/$1/public_html; 
 mkdir -p /srv/www/$1/logs; 
 cp /path/to/vhtemplate /etc/apache2/sites-available/$1
 sed -i -e 's/#1/$1/' /etc/apache2/sites-available/$1
 a2ensite $1