■ はじめに
小ネタ。 ファイルの書き出しについて、意外と使うのでメモ。 Dockerなんかの簡単な設定ファイル作成にも便利。
目次
【1】ファイル出力 1)echo を使ったファイル出力 2)printf を使ったファイル出力 【2】使用上の注意 - printf 1)「%」を表示したい場合 2)指定した変数に空白がある場合 【3】サンプル 【4】おまけ1:Dockerファイルでの利用 【5】おまけ2:ヒアドキュメント
【1】ファイル出力
1)echo を使ったファイル出力
* おさらいの意味をこめて、、、
構文
echo "Hello world" > hello.txt
リダイレクション 「>」と「>>」
*「>」: ファイルがあれば上書き *「>>」: ファイルがあれば追記
オプション「-e」(改行するために)
echo -e "Hello\nWorld\n!!!" > hello3.txt
2)printf を使ったファイル出力
* C言語の printf みたいな感じで使える * あまりにも古い環境だと使えないかも、、、
https://genzouw.com/entry/2020/02/04/140039/1912/
構文
printf "Hello world" > hello.txt
サンプル
$ printf "Hello\nWorld\n" > hello.txt $ cat hello.txt Hello World
補足:数字のカンマ区切りで表示
$ printf "%'d\n" 1234567890 1,234,567,890
【2】使用上の注意 - printf
* 以下をみると、実用上、printfは扱いづらいかも => 数字のカンマ区切りなどの機能を使うなどで使う以外は 使用を控えた方がよさそう。
1)「%」を表示したい場合
* 「%」を表示したい場合は、「%%」とする
例:HTML出力
# NGケース:そのまま表示する場合 => エラー「invalid format character」が表示 $ printf "<table style='width:60%'>\n" bash: printf: `>': invalid format character <table style='width:60 # OKケース:「%%」 $ printf "<table style='width:60%%'>\n" <table style='width:60%'>
2)指定した変数に空白がある場合
* 指定した変数に空白がある場合、囲み文字で使う必要がある => これでバグった。。。 => 囲み文字で囲うと解消できるが、素直に echo を使った方がいいと思った
例:HTML出力
#!/bin/bash # <fontの後にスペースが入っている input="<font color='red'>Error</font>" echo "[NG CASE]" printf "<p>%s</p>" ${input} echo "" echo "[OK CASE]" # 囲み文字「"」で囲った printf "<p>%s</p>" "${input}"
出力結果
$ ./sample.sh [NG CASE] <p><font</p><p>color='red'>Error</font></p> [OK CASE] <p><font color='red'>Error</font></p>
【3】サンプル
例1:psqlのパスワード
* 以下の関連記事より抜粋
https://dk521123.hatenablog.com/entry/2020/03/06/000000
#!/bin/sh host_name="localhost" port="5432" db_name="sample_db" user_name="postgres" user_password="password" echo "${host_name}:${port}:${db_name}:${user_name}:${user_password}" > ~/.pgpass chmod 600 ~/.pgpass
【4】おまけ1:Dockerファイルでの利用
* Dockerの簡単なダミーファイル作成時に使えるかと。。。
サンプル
RUN echo $'\n\ [default]\n\ aws_access_key_id = xxx\n\ aws_secret_access_key = xxx\n\ ' >> ~/.aws/credentials RUN chmod 600 ~/.aws/credentials
【5】おまけ2:ヒアドキュメント
https://dk521123.hatenablog.com/entry/2016/05/13/231535
より抜粋 ~~~~ * 複数行の文字列を簡潔に記述するための機能 ~~~~
サンプル
#!/bin/bash cat > HelloWorld.txt <<_EOF_ Hello world How are you? _EOF_ cat HelloWorld.txt
出力結果
$ ./sample.sh Hello world How are you?
参考文献
https://eng-entrance.com/linux-command-echo
https://qiita.com/take4s5i/items/e207cee4fb04385a9952
関連記事
psqlでパスワードを省略する
https://dk521123.hatenablog.com/entry/2020/03/06/000000
ヒアドキュメント ~ 複数行の テキストをファイル出力する ~
https://dk521123.hatenablog.com/entry/2016/05/13/231535
ファイルの内容を表示するコマンド
https://dk521123.hatenablog.com/entry/2016/08/08/235934