よく使うシェルスクリプト

 ツイート 0  シェア 0  Hatena 1

bash

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

目次

  1. set -e
  2. if
  3. curl
  4. tar を wget して展開するワンライナー
  5. for
  6. while
  7. オプションで -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

-f(–fail)
403, 404, 500 などエラーの時に標準出力にエラー文字を出さない
-s(–silent)
進捗の表示をしない
-sS
進捗の表示をしないけどエラーは表示する
-L(–location)
リダイレクトする

API を叩く時に curl -fsL のセットをよく使う。

tar を wget して展開するワンライナー

tar で固められたバイナリを展開するときよく使う。

$ wget -O - https://host/file.tar.gz | tar zxf - -C /opt

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
 ツイート 0  シェア 0  Hatena 1