web-dev-qa-db-ja.com

シェルスクリプト:ファイルが存在しない場合に、ファイルに複数行のコンテンツを書き込むにはどうすればよいですか?

シェルスクリプトを介してこの内容のファイル/opt/nginx/conf.d/default.confを作成し、ファイルが存在しない場合は作成する必要があります。

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    root /usr/share/nginx/html;
}

シェルスクリプトを使用して複数行のコンテンツを作成するにはどうすればよいですか?

ディレクトリを作成しました

Sudo mkdir -p /opt/nginx/conf.d

しかし、ファイルの書き方がわかりません。

9
user3142695

概要:>>を使用して追加し、[ -f file ]を使用してテストします。

試す

if [ ! -f myfile ]
then
   cat <<EOF > myfile
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name $server ;
    root /usr/share/nginx/html;
}
EOF
fi
  • 構文cat <<EOFは「 ここのドキュメント 」と呼ばれます。
  • $serverはその値に置き換えられます。未定義の場合は空になります。
  • 指摘したように、単一引用符で囲んだ'EOF'を使用すると、varがある場合にそれを置き換えないようにすることができます。
  • 複数のエコーを使用することもできます(エコーが多すぎると、これを維持するのが面倒になる可能性があります)

    echo "## foo.conf" > foo.conf
    echo param1=hello >> foo.conf
    echo param2=world >> foo.conf
    

先頭に付ける

bashに直接プリペンドはありません。一時ファイルを使用します

mv file file_tmp
cat new_content file_tmp > file
rm file_tmp

またはそれを編集する

sed -i -e '1r new_file' -e 'wq' file
13
Archemar

/opt/nginx/conf.d/default.confファイルにnotが存在する場合、静的文字列をファイルに出力(f)します。

[ -f /opt/nginx/conf.d/default.conf ] || printf 'server {\n    listen 80 default_server;\n    listen [::]:80 default_server;\n    server_name _;\n    root /usr/share/nginx/html;\n}\n' > /opt/nginx/conf.d/default.conf
3
Jeff Schaller