Shell
Sample
alias hoge=/home/user/bin/hoge : エイリアスをつける export val="hoge" : 変数の定義 var="`echo hoge`" : コマンドの出力を変数に入力 echo ${hoge} : 変数の表示 declare -i var : 変数を数値として扱う shift : 引数をひとつシフトする command > out.txt : 標準出力(stdout)のファイル出力 command > out.txt : 標準出力(stdout)のファイル追記 command < input.txt : ファイルの内容をコマンドの標準入力(stdin)に入力 command << EOF : 文字列 EOF までの内容をコマンドの標準入力(stdin)に入力 command 1> out.txt : 標準出力(stdout)のファイル出力 command 2> error.log : 標準エラー(stderr)のファイル出力 command 1> out.txt 2> error.log : 標準出力(stdout)を out.txt に出力して標準エラー(stderr)を error.log に出力 command >&2 : 標準出力(stdout)を標準エラー(stderr)にマージ command > out.txt 2>&1 : 標準出力(stdout)と標準エラー(stderr)の両方をファイル出力 command > /dev/null 2>&1 : 標準出力(stdout)と標準エラー(stderr)の両方を破棄 command1 2>&1 | command2 : 標準出力(stdout)を標準エラー(stderr)の両方を command2 でパイプ処理 count=`expr ${count:-0} + 1` : 変数 count の増加 echo b{ed,olt,ar}s : ブレース置換 (= beds bolts bars) cginame=${htmlname%.html}.cgi : パターン照合置換 names=(1st 2nd 3rd); echo ${name[1]} : 配列 (Version 2.0 以降) subfunction(){ ... } : 関数の定義 (cd ${dir}; cat ${file}) : ディレクトリ変更 ## Update File (rm -f hoge.txt && cat > hoge.txt) < hoge.txt (rm -f hoge.txt && cat | sed s/aaa/bbb/g > hoge.txt) < hoge.txt ## 算術式 (e.g., calc.sh 2 + 3) echo "$1 $2 $3 = $(($1 $2 $3))" ## 変数リストから逐次的に変数に代入する for val in val1 val2 val3 ; do eval ${val}="`echo ${hoge}`" done ## run.sh の標準出力と標準エラーを画面と stdout.log の両方に出力して、さらに標準エラーのみ stderr.log に送る { { sh run.sh; } 3>&2 2>&1 1>&3 | tee stderr.log; } 3>&2 2>&1 | tee stdout.log
Variable
$0 : 0番目の引数 (=シェルスクリプトの名前) $1..., ${10}... : 1番目から9番目の引数、および10番目以降の引数 (2桁の場合は{}が必要) $# : 引数の数 $@ or $* : 全ての引数のリスト $$ : プロセス番号 $? : 直前のコマンドの実行結果 (正常終了時には 0 が代入される) $var or ${var} : 変数 ${var:-text} : 変数が存在して空でなければその値、それ以外なら文字列 text ${var:=text} : 変数が存在して空でなければその値、それ以外なら変数に文字列 text を設定 ${var:?text} : 変数が存在して空でなければその値、それ以外なら文字列 text を出力して終了 ${var:+text} : 変数が存在して空でなければ文字列 text を出力、それ以外なら空 ${var:pos} : 指定位置 pos から末尾までの部分文字列 ${var:pos:len} : 指定位置 pos から長さ len に相当する部分文字列 ${var#pattern} : 変数の先頭がパターンマッチした場合、最短マッチ部分を削除 ${var##pattern} : 変数の先頭がパターンマッチした場合、最長マッチ部分を削除 ${var%pattern} : 変数の末尾がパターンマッチした場合、最短マッチ部分を削除 ${var%%pattern} : 変数の末尾がパターンマッチした場合、最長マッチ部分を削除 ${var/pattern/text} : 最初にパターンマッチした部分を文字列 text で置換 ${var//pattern/text} : パターンマッチしたすべての部分を文字列 text で置換 $((1 + 2)) : 算術式 (=3) ${#var} : 変数の文字数 echo `expr "${var}" : '.*'` : 変数の文字数 (OS非依存) \n : Line Feed \r : Carriage Return \t : Tab \b : Backspace \a : Beep
Loop
for i in 0 1 2 3 ; echo ${i}
for i in 0 1 2 3 ; do echo ${i} done
for i in $(seq 0 3) ; do echo ${i} done
while [ "$1" != "" ] ; do echo "" done
If
if [ "$1" = "-h" ] ; then echo "-h" elif [ "$1" = "-help" ] ; then echo "-help" elif [ $# -eq 0 ] ; then echo "manual" elif [ -d ${dir} ] ; then echo "dir" elif [ "${var}x" != "x" ] ; then echo "hoge" elif [ "${var}x" = "hogex" ] ; then echo "hoge" else exit 0 fi
[ -f ${file} ] && echo "hoge" [ "${var}x" = "hogex" ] && echo "true" || echo "false"
Operator
= : 文字列同士が等しければ真 (sh) == : 文字列同士が等しければ真 (csh) != : 文字列同士が等しくなければ真 -a : and 複数の条件を組み合わせるときに使う (sh) && : and 複数の条件を組み合わせるときに使う (csh) -o : or 複数の条件を組み合わせるときに使う (sh) || : or 複数の条件を組み合わせるときに使う (csh) -n : 文字列が存在すれば真 -z : 文字列が存在しなければ真 -d : ディレクトリが存在すれば真 -f : ファイルが存在すれば真 -s : ファイルが存在し、かつファイルサイズが 0 でなければ真 -e : ディレクトリもしくはファイルが存在すれば真 -r : ファイルが読み込み可能であれば真 -w : ファイルが書き込み可能であれば真 -x : ファイルが実行可能であれば真 -u : ファイルに SetUID ビットが設定されていれば真 -g : ファイルに SetGID ビットが設定されていれば真 -k : ファイルに Sticky Bit が設定されていれば真 -eq : 等しければ真 -ne : 等しくなければ真 -ge : 以上であれば真 -gt : より大きければ真 -le : 以下であれば真 -lt : より小さければ真
Command
; : 左側のコマンドを実行した後に右側のコマンドを実行 && : 左側のコマンドが成功した場合のみ右側のコマンドを実行 || : 左側のコマンドが失敗した場合のみ右側のコマンドを実行
File Descriptor
## 0から順番に整数値のファイルディスクリプタ(ファイル識別子)が定義される 0 : 標準入力(stdin) 1 : 標準出力(stdout) 2 : 標準エラー出力(stderr) 3 ... : 以降はOSが開くファイルに順番に割り当てられる
Acknowledgments
Daiphys is a professional-service company for research and development of leading-edge technologies in science and engineering.
Get started accelerating your business through our deep expertise in R&D with AI, quantum computing, and space development; please get in touch with Daiphys today!
Daiphys Technologies LLC - https://www.daiphys.com/