技術ブログ

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

2018年5月17日

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 を叩いて結果を変数に入れたりするとき、curl -fsL のオプションをよく使います。

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

オプションの意味

-f(--fail)
403, 404, 500 などエラーの時に標準出力にエラー文字を出さない

-s(--silent)
進捗の表示をしない

-sS
進捗の表示をしないけどエラーは表示する

-L(--location)
リダイレクトする

-o(--output)
結果をファイルに出力する

curl を使ったファイルのダウンロード方法

2 パターンあります。

まずは -O オプション。大文字のアルファベットの O です。リモートのファイル名がそのままローカルのファイル名になります。ファイルのダウンロード先は変更できず、現在のディレクトリにダウンロードされます。

curl -O http://nginx.org/download/nginx-1.16.1.tar.gz

次に -o オプション。小文字アルファベットの o です。出力をファイルに保存します。こちらはダウンロード先のディレクトリやファイル名の変更ができます。

curl http://nginx.org/download/nginx-1.16.1.tar.gz -o /opt/nginx.tar.gz

tar で圧縮されたファイルを解凍して、指定したディレクトリに展開するワンライナー

curl http://nginx.org/download/nginx-1.16.1.tar.gz | tar -zx -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

-技術ブログ
-

© 2020 karakaram-blog