シェルスクリプト書くときになかなか覚えていなくて、かつググラビリティが低い情報をまとめてみました。
- 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 アプリ終了のシグナル |
その他のシグナルはこちら参照