shell 脚本中分号处的语法错误

shell 脚本中分号处的语法错误

单行命令会更长,但这是引发错误的部分。

for user in natural1 ; do 
cat <<EOT >> /home/$user/public_html/.htaccess
<FilesMatch "wp-login.php">
AuthType Basic
AuthName "Secure Area"
AuthUserFile "/home/$user/.htaccesspasswd"
require valid-user
</FilesMatch>
EOT
; done

-bash: syntax error near unexpected token `;'

答案1

shell 脚本中的分号或与号 (;&) 是命令终止符。如果它不遵循命令,则无法使用它。;意思是“在前台运行前面的命令”,&意思是“在后台运行前面的命令”。

shell 脚本中的换行符是“弱”命令终止符。如果有终止命令,则相当于分号。如果没有终止命令,则换行符无效。

后面的换行符cat <<EOT >> /home/$user/public_html/.htaccess终止cat …命令。因此,here-document 后面的分号没有任何内容可以终止。(here-document 不是命令;here-document 附加在前一行的命令上,即命令cat …。)如果您想cat …用分号明确终止命令,则需要将其放在行末cat …

相关内容