たまに BASH のシェルスクリプトを書く時にすぐ忘れて毎回ググったり、「あのあれはどこで書いたっけ」と過去のシェルスクリプトを探し回ったりするのでコピペ用にまとめ。随時更新。
目次
set -e
-e
オプションをつけるとエラーが出た時に処理が止まるようになります。
#!/usr/bin/env bash
set -e
if
基本形
if の中の変数はダブルクォートで囲み、変数が null のときにエラーが出るのを防ぎます。
if [ "${foo}" == "" ]; then
# do something
elif [ "${foo}" != "bar" ]; then
# do something
else
# do something
fi
正規表現
正規表現は特殊で、文字列をダブルクォートで囲みません。
if [[ "${foo}" =~ ^bar ]]; then
# do something
fi
タブ文字
bar
とbaz
の間にタブ文字がある場合の例です。
if [ "${foo}" == bar$'\t'baz ]; then
fi
ファイルやディレクトリの存在確認
ファイルもディレクトリもどちらも -e
で OK です。
if [ ! -e foo.txt ]; then
echo "foo.txt does not exist"
fi
コマンドの存在確認
if ! type command > /dev/null 2>&1; then
echo "command does not exist"
fi
if のオプション
if のオプションはたくさんあるので man test
参考にすると良いです。よく使うものだけ抜粋。
-e
ファイルが存在するときに true
-z
文字列の長さがゼロのときに true
-n
文字列の長さがゼロでないときに true
curl
curl は長くなってきたので別の記事にしました。
-
curlオプション覚え書き
いつからだったか、Mac に wget コマンドが標準で入らないようになってから curl コマンドを使うことが増えまし ...
続きを見る
for
配列を展開しながらループするとき
names=(
"foo"
"bar"
)
for name in ${names[@]}; do
echo ${name}
done
${i}
に 1 から 5 まで代入して 5 回ループするとき
for i in {0..5}; do
echo ${i}
done
while
whileの開始時点でループの条件を判定するとき
while [ "${foo}" == "bar" ]; do
done
無限ループさせて、ループの中で条件判定して抜けるとき
while [ true ]; do
# exit loop
if [ "${foo}" == "bar" ]; then
break
fi
done
オプションで -h と渡された時にヘルプを表示する
他に引数やオプションがない時にぱぱっと書く時
if [ "$1" = "--help" ] || [ "$1" = "-h" ] || [ -z "$1" ]; then
# do something
fi
ヒアドキュメントでファイル出力
cat << EOT > example.txt
foo
bar
baz
EOT