Help us understand the problem. What is going on with this article?

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

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

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

muran001
2014年6月から大手SIerに見切りをつけてWeb系のエンジニアとして活動してます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away