0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

bashのTIPSの個人的まとめ

Last updated at Posted at 2021-10-22

ヒアドキュメント

複数行のテキストを処理する機能
例えば以下のような形
(EOLの部分は任意。他にEOSEOFなどもよく使われる)

cat << EOL >> temp.txt
line1
line2
line3
EOL

これを使うとwhile文やfor文、変数への代入が楽になったりする。

cat << EOL | while read r
repository1
repository2
repository3
EOL
do
    echo ${r}
done
for r in $(cat << EOL
repository1
repository2
repository3
EOL
);
do
    echo === ${r} ===
    git -C ${r} status -sb
done
repositories=$(cat << EOL
repository1
repository2
repository3
EOL
)

参考リンク

変数の展開

変数が定義されていない時だけ設定したい、みたいなデフォルト引数的な処理などに使える。

具体例
value=${1:-"empty"}とすると、引数が空だとemptyが設定されるし引数が渡されたらその引数が入っている。
: ${TOOL_PATH:="/bin"}とすると、変数(主に環境変数)が設定されていたらそれを使うし、そうでなければ/binを代入する。

TIPS:ここの:は何もしない命令で、単に${TOOL_PATH:=}とすると${TOOL_PATH}に設定されている値か、空であれば/binがコマンドと解釈されてしまう。

参考リンク

エラーや未定義変数操作時に処理を止める

bashコマンドの引数で解決する。

  • -e : エラー発生時に止める
  • -u : 未定義変数参照時にエラーにする

実行コマンドをログに表示するための-xとともに、bash -eux script.shというように使われることが多い。

よくあるのがファイルの先頭に書く呼び出しコマンドのところに引数を与えること。

#!/bin/bash -eux
errorcommand

TIPS: 先頭行で/bin/bashと書く部分はシェルに限らずどのコマンドでも指定できる。pythonとかphpとか。

エラーをもみ消す

例えばキャッシュを削除するような処理で単にrm cacheと呼び出すケースにおいて、cacheが存在しなければエラーになる。
単にエラーになるならNo such file or directoryと怒られるだけだが、bash -eと呼び出していた場合ではそこで処理が止まってしまう。
それを避けるために何もしないコマンド:||(前のコマンドが失敗したら次のコマンドを呼び出す)でつなげることでエラーをもみ消すことができる。
上のケースではrm cache || :と書く。(エラー出力ももみ消すならrm cache 2>/dev/null || :)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?