すぐ忘れるので自分用の備忘録。もちろん Bourne Shell の機能・仕様を網羅しているわけではなく,あくまで自分の頻繁に使うものに限定しているに過ぎない。
- ファイル名メタキャラクタ
	* 0 文字以上の任意の文字列と一致 ? 任意の 1 文字と一致 [abc...] []内のいずれかの文字と一致。“-” で範囲を指定
- コマンドの形式
	cmd1 && cmd2 cmd1 実行後,cmd1 が正常終了したら cmd2 を実行 cmd1 || cmd2 cmd1 実行後,cmd1 が異常終了したら cmd2 を実行 ( cmd1 ; cmd2 ) cmd1 と cmd2 をコマンドグループとして取り扱う 
 ex.:
 (date ; ls -l) > logfile
 dateとls -lのすべての出力をリダイレクトする{ cmd1 ; cmd2 } コマンドを現在のシェルで実行 
- リダイレクト
	cmd >&n 出力をファイル記述子 n に書き込む cmd m>&n ファイル記述子 m に書き込む内容をファイル記述子 n に書き込む cmd >&- 標準出力を閉じる cmd <&- 標準入力を閉じる cmd 2> file 標準エラーを file に書き込む cmd > file 2>&1 標準エラーと標準出力の両方を file に書き込む cmd > /dev/null 2>&1 標準エラーと標準出力の両方を破棄する (cmd > f1) 2>f2 標準出力を f1 に,標準エラーを f2 に書き込む cmd | tee files cmd の出力を標準出力と files(複数でも可)に書き込む 
- 変数置換
	var=value 変数 var に値 value を代入する ${var} var の値を使用する ${var:-value} var 値設定時その値,未設定時 value を使用する ${var:+value} var 値設定時その値を使用,未設定時なにも使用しない ${var:=value} var 値設定時その値,未設定時 value を使用し値を var に代入する 
- 組込みシェル変数
	$# コマンドライン引数の数 $- 現在有効なオプション(sh, setに渡した引数) $? 最後に実行したコマンドのステータス $$ 現在のプロセスのプロセス番号 $! 最後のバックグラウンドコマンドのプロセス番号 $0 コマンド名 $n コマンドラインの各引数(n=1-9) $* コマンドラインのすべての引数 "$@" コマンドラインのすべての引数を個別に引用符で囲んだもの 
- 組込みコマンド
	: ヌルコマンド。終了ステータスとして 0 を返す 
 ex.:while :常に真
 ex.:then :条件が真のときなにもしないbreak [n] ループで最も内側のループを終了するか,最も内側の n レベルのループを終了する continue [n] ループで残りのコマンドを実行せず,ループの次の繰り返しを再開する。ループを n 回スキップする case value in 
 p1) cmds1;;
 p2) cmds2;;
 ...
 esacvalue が p1 と一致する場合 cmds1,p2 と一致する場合 cmds2 を実行 eval args 変数 args を強制的に展開し,その結果作成されたコマンドを実行 
 ex.: opt によってファイル出力・画面出力を選択
 if [ $opt = "f" ]; then
 out=' > file'
 else
 out=' | more'
 fi
 eval sort file $outfor x [in list] 
 do
 commands
 done変数 x を値リスト list 各要素に置き換えながら commands を実行。list 省略時 "$@"(コマンドライン引数リスト)shift [n] 定位置パラメータを左に 1 [n] だけシフト。n 省略時 $2は$1になるtest condition または 
 [ condition ]条件の検査。 
 - if 文
 if [ condition ]; then- while 文
 cmd1
 else
 cmd2
 fi
 while [ condition ]
 do
 commands
 done- ファイル条件 -a file 存在 -d file 存在しディレクトリである -f file 存在し通常ファイルである -s file 存在し0より大きいサイズである -w file 存在し書き込み可能である -x file 存在し実行可能である f1 -nt f2 ファイル f1 が f2 より新しい f1 -ot f2 ファイル f1 が f2 より古い - 文字列条件 -n s1 文字列 s1 の長さが 0 以外 -z s1 文字列 s1 の長さが 0 s1 = s2 文字列 s1 と s2 が同一 s1 != s2 文字列 s1 と s2 が同一でない - 数値条件 n1 -eq n2 n1 が n2 と等しい n1 -ge n2 n1 が n2 と等しいか,それより大 n1 -gt n2 n1 が n2 より大 n1 -le n2 n1 が n2 と等しいか,それより小 n1 -lt n2 n1 が n2 より小 n1 -ne n2 n1 が n2 と等しくない trap [[commands] signals] signals を受信したとき commands を実行する 
 ex.:trap "echo \'interrupt\!\'; ls" 2
 CTRL-C で割り込みを検知したら interrupt! を出力してlsコマンドを実行するwhile [condition] 
 do
 commands
 done
 condition が真の間 commands を実行 
- ジョブ制御
	- ジョブID %n ジョブ番号 n %s コマンドラインが文字列 s から始まるジョブ %?s コマンドラインに文字列 s が含まれるジョブ %% 現在のジョブ %+ 現在のジョブ %- 直前のジョブ - ジョブ制御コマンド bg バックグラウンドに設定 fg フォアグラウンドに設定 jobs アクティブジョブをリスト kill ジョブを終了 stop 一時停止 CTRL-Z フォアグラウンドジョブを一時停止し, fg|bgを使用