シェルスクリプトのセミコロンに構文エラーがあります。

シェルスクリプトのセミコロンに構文エラーがあります。

1行のコマンドは長いですが、これがエラーを引き起こす部分です。

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

シェルスクリプトのセミコロンまたはアンパサンド(;または&)はコマンドターミネーターです。コマンドに従わないと使用できません。;これは、「前のコマンドをフォアグラウンドで実行」を意味し、&「前のコマンドをバックグラウンドで実行」を意味します。

シェルスクリプトの改行文字は「弱い」コマンドターミネーターです。終了コマンドがある場合は、セミコロンと同じです。終了コマンドがなければ、改行文字は何の効果もありません。

次の改行文字はコマンドをcat <<EOT >> /home/$user/public_html/.htaccess終了します。cat …したがって、here-documentの後にセミコロンで終わることはありません。 (here-documentはコマンドではありません。here-documentは前の行のコマンドであるcommandに追加されます。cat …)セミコロンでコマンドを明示的に終了するには、cat …そのコマンドをステートメントの末尾に入れる必要があります。ラインcat …

関連情報