Edited at

今更ながら抑えておきたいシェルスクリプト用チートシート

More than 5 years have passed since last update.

シェルスクリプト書くときになかなか覚えていなくて、かつググラビリティが低い情報をまとめてみました。


  • 6/19 コメントを元に一部修正しました
    hnakamurさんありがとうございます!


参考になる文献


特殊な変数

変数
説明

$#
シェル引数の数

$0
シェル自身のファイル名

\$1〜$n
シェルの各引数

$*
シェルの全引数リスト(スペース区切り)

$@
シェルの全引数リスト

$$
シェルのプロセスID

$!
最後に実行したバックグラウンドプロセスID

$?
最後に実行したコマンドの終了コード


演算子


共通の演算子

演算子
説明

a -a b
AND

a -o b
OR


文字列用演算子

演算子
説明

-z
文字列長が0ならtrue (zero)

-n
文字列長が0より大ならtrue (not zero)

a = b
2変数が等しければtrue

a != b
2変数が等しくなければtrue


整数用演算子

演算子
説明

a -eq b
2変数が等しければtrue (equal)

a -ne b
2変数が等しくなければtrue (not equal)

a -lt b
aがbより小ならtrue (less than)

a -le b
aがb以下ならtrue (less than equal)

a -gt b
aがbより大ならtrue (greater than)

a -ge b
aがb以上ならtrue (greater than equal)


ファイル用演算子

演算子
説明

-d
ディレクトリならtrue (directory)

-f
ファイルならtrue (file)

-s
ファイルサイズが0より大ならtrue (size)

-e
ファイルが存在するならtrue (exist)

-r
ファイルが読み込み可能ならtrue (readable)

-x
ファイルが実行可能ならtrue (executable)

-w
ファイルが書き込み可能ならtrue (writable)

-o
ファイルの所有権があるならtrue (owned)

-L
ファイルがシンボリックリンクならtrue (Link)

a -nt b
aファイルがbファイルより新しければtrue (newer than)

a -ot b
aファイルがbファイルより古ければtrue (older than)


変数処理

path=/path/to/file.txtのようなデータとする

varは任意の文字列

項目
 説明 

${path:h}
pathのディレクトリ階層(head)

${path:t}
pathのファイル名(tail)

${path:r}
pathの拡張子以外のファイル名(root)

${path:e}
pathの拡張子(extension)

${path:a}
pathの絶対パス(all)

${var:=値}
varが初期化されていなければ値を変数に代入

${var:-値}
varが初期化されていなければ代わりに値を返す

${var:+値}
varが初期化されていれば代わりに値を返す

${var:?メッセージ}
varが初期化されていなければメッセージを返す

${var#正規表現}
前方一致で最短マッチの文字列

${var##正規表現}
前方一致で最大マッチの文字列

${var%正規表現}
後方一致で最短マッチの文字列

${var%%正規表現}
後方一致で最大マッチの文字列

${var/文字列1/文字列2}
文字列1を文字列2に置換


リダイレクト

項目
 説明 

1> file
標準出力(1は省略可能)をファイルに上書き

2> file
標準エラー出力をファイルに上書き

>> file
標準出力をファイルに追記

2>> file
標準エラー出力をファイルに追記

>&-
標準出力をクローズ

command > file 2>&1
標準出力&標準エラー出力

command > /dev/null 2>&1
実行結果やエラーメッセージをすべて捨てる

0< file
標準入力(0は省略可能)にファイルから読み込む

<< word
標準入力にヒアドキュメントを読み込む

<&-
標準入力をクローズ

: > file
ファイルのゼロリセット

なお上記についてfileの部分は&m (mは数字)というファイルディスクリプタ番号を指定することで1の標準出力や2の標準エラー出力以外の独自の番号にリダイレクトできます。


シグナル

trapなどで使うシグナルの一覧

trap 'commands' 番号(複数可)

で呼び出して使ったりする

項目
 説明 

1
SIGHUP ハングアップシグナル

2
SIGINT キーボードからの割り込みシグナル

3
SIGQUIT キーボードからの中止シグナル

9
SIGKILL プロセス強制終了のキルシグナル

15
SIGTERM アプリ終了のシグナル

その他のシグナルはこちら参照