3
5

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 5 years have passed since last update.

逆引きシェルスクリプト(bash)

Last updated at Posted at 2019-03-27

Shebang(シバン)の書き方

  • Unix全般で動作するようにPOSIX準拠で記述する場合:#!/usr/sh
  • Linuxで動けばよい(Bash拡張機能を使いたい)場合:#!/usr/bin/env bash

参考

シェルオプションを設定する

set [オプション]で設定する。よく使うオプションは以下の通り。

オプション 説明
-e コマンド実行がエラーとなった場合に処理を終了する。
-u 変数展開時に未設定のものがある場合にエラーとする。
-C リダイレクトで上書きとなる場合にエラーとする。
-a 変数定義で自動的にexportする。
-v シェルの入力行を出力する。
-x トレース情報を出力する。

参考

オプションと引数を扱う

getoptsでオプションを読み込んだ後にshiftして引数を$nで取得する。

# :  デフォルトのエラー処理を(エラーメッセージ表示のみ)を無効化する
# a  引数なしオプション
# b: 引数ありオプション
while getopts :ab: OPT; do
  case ${OPT} in
    a) A=1 ;;
    b) B=$OPTARG ;;
    # : 引数ありオプションに引数が指定されない場合
    # ? 未定義のオプションが指定された場合
    :|\?) echo "usage: ..."; exit 1 ;;
  esac
done

# 最初の引数が$1にセットされるまでシフトする
shift $((${OPTIND} - 1))

参考

環境変数をファイルから読み込む

allexportを有効にしてsourceで読み込む。

set -a; for f in *.env; do . ${f}; done; set +a

参考

ヒアドキュメント

変数に格納するにはcatを使う。変数展開を無効化するには<< 'EOS'、最後のEOSをインデントするには<<- EOSと記述する。

VAR=$(cat << EOS
one
two
)

参考

y/N ダイアログ

readで標準入力から読み込み、caseで分岐処理する。

read -p "...? (y/N): " yn
case "${yn}" in [yY]*) ;; *) exit ;; esac

参考

ラッパースクリプト

オプションを引き継ぐ場合は"$@"で、標準出力と標準エラー出力を加工するには一時ファイルを使う。

stdout=$(mktemp)
stderr=$(mktemp)
command --option "$@" > ${stdout} 2> ${stderr}

# ここで${stdout}と${stderr}を加工する

echo ${stderr} >&2
echo ${stdout}
rm ${stdout} ${stderr}

参考

文字列を変数・コマンド名として評価する

evalを使う。

key=a
value_a=b
eval echo '$value_'${e}

参考

配列

  • 配列の定義:array=(空白区切りの要素リスト)
  • 要素の参照:array[インデックス]
  • 要素の追加:array=("${array[@]}" 追加要素)
  • ループ:for e in "${array[@]}"(インデックスが必要な場合はfor i in "${!array[@]}"
str="a,b,c"
# カンマ区切りの文字列を空白区切りに変換して()に入れると配列にできる。
# (注意:要素に空白が含まれないことが前提)
array=($(echo ${str} | tr ',' ' '))

# インデックスを使ったループ
for i in "${!array[@]}"; do
    echo "${i}: ${array[$i]}"
done

参考

3
5
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
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?