技術ブログ

BASHシェルスクリプト覚え書き

2018年5月17日

BASH

たまに BASH のシェルスクリプトを書く時にすぐ忘れて毎回ググったり、「あのあれはどこで書いたっけ」と過去のシェルスクリプトを探し回ったりするのでコピペ用にまとめ。随時更新。

目次

  1. set -e
  2. if
  3. curl
  4. for
  5. while
  6. オプションで -h と渡された時にヘルプを表示する

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

タブ文字

if [ "${foo}" == bar$'\t'baz ]; then
fi

ファイルやディレクトリの存在確認

if [ ! -e foo.txt ]; then
    echo "foo.txt does not exist"
fi

ファイルもディレクトリもどちらも -e で OK です。

コマンドの存在確認

if ! type command > /dev/null 2>&1; then
    echo "command does not exist"
fi

オプション

if のオプションはたくさんあるので man test 参考にすると良いです。よく使うものだけ抜粋。

-e
ファイルが存在するときに true

-z
文字列の長さがゼロのときに true

-n
文字列の長さがゼロでないときに true

curl

よく使う fsL オプション

シェルスクリプトから API を叩いて結果を jq で加工するとき、curl -fsL のオプションをよく使います。

curl -fsL https://api.github.com

curl は長くなってきたので別の記事にしました。

BASH
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

-技術ブログ
-

© 2020 karakaram-blog