我想知道除了将每行附加到文件之外,是否还有更好的方法来创建文件。我这样做是为了保持可读性,但是没有缩进。有没有办法创建一个文件并一次输入多行?
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
答案1
使用 heredoc。
cat > /etc/apache2/sites-available/"$1" << EOF
<VirtualHost>
ServerAdmin support@$1
...
EOF
答案2
如答案 #1 中所述,或者让您的回声跨越多行
echo "line 1
line2
line3" > file
答案3
如果您追求的是可读性,您是否考虑过将其拆分成多个文件?有一个可以编辑的“模板”文件,并将其与 shellscript 一起复制。
## /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