ファイル ディスクリプタ番号 | 用途 |
0 | 標準入力 |
1 | 標準出力 |
2 | エラー出力 |
3~9 | 任意 |
リダイレクト元 | リダイレクト記号 | リダイレクト先 |
なし (省略時は 1 になる) 1 2 &num | > (上書き) >> (追記) | filename &1 (標準出力のリダイレクト先と同じ) &2 (標準エラーの出力先と同じ) &num (その他のリダイレクト先と同じ) |
$ command >filename $ command 1>filename
$ command 2>filename
$ command >filename 2>&1 $ command 1>filename 2>&1 $ command 2>filename 1>&2
$ command >filename1 2>filename2 $ command 1>filename1 2>filename2
$ command 1>filename1 2>filename2 $ 1>filename1 command 2>filename2 $ 1>filename1 2>filename2 command
$ command1 | command2
$ false | false | true $ echo $? 0
$ false | false | true $ echo ${PIPESTATUS[@]} 1 1 0
$ set -o pipefail $ false | false | true $ echo $? 1
# command1 ; command2 ; command3
# command1 && command2 && command3
# ./configure && make
# command1 || command2 || command3
ex) 正常時と異常時で処理を分ける
# command1 || command2 && command3 || command4
(command1 ; command2)
if expr1 then command1 elif expr2 then command2 else command3 fi
case $var in A) 変数がAだった場合の処理;; B) 変数がBだった場合の処理;; C) 変数がCだった場合の処理;; *) その他の変数だった場合の処理;; esac
list="value1 value2..." select var in $list do command done
for var in list do command done
while [ expr ] do command done
i=0 while [ $i -le 10 ] do echo "$i" i=`expr $i + 1` done
while read var do command done < listfile
cat test.txt | while read i do echo $i done
while read i do echo $i done < test.txt
while read i do echo $i done <<END `cat test.txt` END
while read i do echo $i done <<END value1 value2 value3 ... END
while getopts option i; do command done
while getopts abc:d: i; do case "$i" in a) -aオプションが指定された場合の処理 ;; b) -bオプションが指定された場合の処理 ;; c) 値を持つ-cオプションが指定された場合の処理 ;; d) 値を持つ-dオプションが指定された場合の処理 ;; esac done
until expr do command done
return [num]
exit num
function () { 処理 }
function
条件式 | 意味 | 説明 |
-d file | directory | file がディレクトリなら真 |
-f file | file | file がファイルなら真 |
-e file | file が存在すれば真 | |
-r file | read | file が存在して、読み込み可能なら真 |
-w file | write | file が存在して、書き込み可能なら真 |
-x file | excute | file が存在して、実行可能なら真 |
-s file | size | file が存在して、サイズが 0 でなければ真 |
条件式 | 説明 |
str1 = str2 | str1 と str2 が等しければ真 |
str1 =~ regex | str1 と regex が等しければ真 |
str1 != str2 | str1 と str2 が等しくなければ真 |
-z str ! str | str が空なら真 |
-n str str | str が空でなければ真 |
条件式 | 意味 | 説明 | 数式 |
num1 -eq num2 | equal | num1 と num2 が等しければ真 | num1 = num2 |
num1 -ne num2 | not equal | num1 と num2 が等しくなければ真 | num1 ≠ num2 |
num1 -gt num2 | greater than | num1 が num2 超なら真 | num1 > num2 |
num1 -lt num2 | less than | num1 が num2 未満なら真 | num1 < num2 |
num1 -ge num2 | less than or equal | num1 が num2 以上なら真 | num1 ≧ num2 |
num1 -le num2 | greater than or equal | num1 が num2 以下なら真 | num1 ≦ num2 |
条件式 | 意味 | 説明 |
! expr | not | exprが偽なら真 |
expr1 -a expr2 | and | expr1 と expr2 が両方真なら真 |
expr1 -o expr2 | or | expr1 か expr2 のどちらかが真なら真 |
VAR=stgings echo $VAR
VAR=stgings echo ${VAR}abc
変数 | 意味 |
$$ | シェル スクリプトの PID |
$0 | シェル スクリプトのファイル名 |
$num | num 番目の引数 |
$# | 引数の数 |
$? | 直前のコマンドの終了コード |
${PIPESTATUS[@]} | パイプで繋いだ全コマンドの終了コード (bash) |
$IFS | Internal Field Separator 区切り文字 (デフォルトは改行、空白、タブ) |
$OPTARG | while getopts 参照 |
変数 | 意味 |
${i#str} | 変数 $i の先頭から str を取り除く ## だと最長一致 |
${i##str} | |
${i%str} | 変数 $i の末尾から str を取り除く %% だと最長一致 |
${i%%str} | |
${i:pos:num} | 変数 $i の pos 文字目から num 文字を取り出す |
${i:-str} | 変数 $i が空の場合、str を返す |
${i:=str} | 変数 $i が空の場合、str を返し、変数にセットする |
${#i} | 変数 $i の文字数 |
var[n]=value
var=(value1 value2 value3...)
echo $((expr))
# test expr # [ expr ]
[user@host ~]$ test $USER = user [user@host ~]$ echo $? 0 [user@host ~]$ test $USER = root [user@host ~]$ echo $? 1
[user@host ~]$ true [user@host ~]$ echo $? 0
[user@host ~]$ : [user@host ~]$ echo $? 0
[user@host ~]$ false [user@host ~]$ echo $? 1
echo [option] strings
オプション | 説明 |
-n | 末尾に改行コードを入れない |
-e | エスケープ文字を使用可能にする \n 改行 (LF) \r 改行 (CR) \t Tab |
eval ARG='${'$i'}'
eval expr '${'$i'}' + 1
# time command
# time sleep 3 real 0m3.002s user 0m0.002s sys 0m0.000s
# expr 1 + 1 2 # expr 2 \* 2 4
# basename /foo/bar bar
# dirname /foo/bar /foo
オプション | 説明 |
-v | |
-x | デバッグ |
# while :; do command; sleep time; done
expr "$NUM" + 1 > /dev/null 2>&1 if [ $? -lt 2 ] then $NUMが数字である場合の処理 else $NUMが数字でない場合の処理 fi