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が開くファイルに順番に割り当てられる