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

  • 1447
    いいね
  • 9
    コメント
この記事は最終更新日から1年以上が経過しています。

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

  • 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 アプリ終了のシグナル

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