export HISTFILE=<新しいコマンド履歴ファイル名>とする。
| 変数 | 意味 |
|---|---|
| $0 | シェル、あるいはプログラムの名前 |
| $1 $2 ... | 引数 |
| $@ | 引数の配列 |
| $* | |
| $# | 引数の数 |
| $- | シェルの呼出し時に指定されたオプション |
| $_ | 前のコマンドの最後の引数 |
| $! | 最後に起動したバックグラウンドジョブのPID |
| $? | 最後に実行したコマンドや関数のRETURN値 |
| $$ | そのプロセスのPID |
| 変数 | 意味 |
|---|---|
| ${#val[@]} | ${val} の長さ(文字列としてみた場合の文字数に相当) |
| ${#val} | 配列${val[@]} の配列数 |
変数 ${hoge} に対して
| 書法 | 意味 | 備考 |
|---|---|---|
| ${hoge%<ptrn>} | 末尾から見て、<ptrn> に最も短く一致する部分を取り除いた値 | |
| ${hoge%%<ptrn>} | 末尾から見て、<ptrn> に最も長く一致する部分を取り除いた値 | |
| ${hoge#<ptrn>} | 先頭から見て、<ptrn> に最も短く一致する部分を取り除いた値 | |
| ${hoge##<ptrn>} | 先頭から見て、<ptrn> に最も長く一致する部分を取り除いた値 | |
| ${hoge/<ptrn>/<str>} | ${hoge} の値で<ptrn>に最も長く一致する最初の部分だけを<str>で置換する | <ptrn>が # で始まる場合は、hoge の先頭と一致しなければならない <ste>がNULLの場合は、一致した部分が削除される。 |
| ${hoge//<ptrn>/<str>} | ${hoge} の値で<ptrn>に一致する部分全てを<str>で置換する |
FULLPATH=/home/user/file_name.ext
PATH=${FULLPATH%/*} # パス部分を表示
FNAME=${FULLPATH##*/} # ファイル名以下を表示
FNAME_ONLY=${FULLPATH%.*} # ファイル名のみを表示
DOTEXT=${FULLPATH##*.} # 拡張子を表示
変数 val に対して
| 書法 | 意味 | 備考 | |
|---|---|---|---|
| val が存在しNULLでない場合 | 左以外の場合 | ||
| ${val:-word} | valを返す | wordを返す | |
| ${val:=word} | valを返す | valにwordを設定して返す | 位置パラメータや特殊なパラメータは除く |
| ${val:?msg} | valを返す | val の後にmsgを出力し、現在のコマンド或はスクリプトを中止する(対話型シェルではない場合) msgを省略すると "parameter null or not set" を出力する。 | |
| ${val:+word} | wordを返す | NULLを返す | |
| ${val:offset} | サブ文字を展開する。 offsetの位置からlength文字の長さのサブ文字r列をvalから取り出す。 文字の位置は0からカウントする。 lengthが省略された場合は、offsetからvalの最後までが展開の対象になる。 offsetが負値の場合、開始位置はvalの終端からカウントされる。 valが@の場合、lengthはoffsetを先頭とする位置パラメータの番号になる。 | ||
| ${val:offset:length} | |||
| 記号 | 意味 |
|---|---|
| -z <string> | <string> の長さが 0 ならば真 |
| -n <string> | <string> の長さが 0 でなければ真 |
| string1 == string2 | 文字列が同じならば真。== の代わりに = でも可 |
| tring1 != string2 | 2 つの文字列が異なれば真 |
| string1 < string2 | 現 在のロケールにおいて、string1 が string2 よりも辞書順で前にある場合に真 |
| string1 > string2 | 現在のロケールにおいて、string1 が string2 よりも辞書順で後に ある場合に真 |
if [ -n ${val} ]; then
処理1
fi
の代わりに
if [ ${#val} -gt 0 ]; then
処理1
fi
とするとうまくいく。| 記号 | 意味 |
|---|---|
| -d <file> | <file>が存在し、且つディレクトリである |
| -e <file> | <file>が存在する |
| -f <file> | <file>が存在し、且つ通常ファイルである |
| -r <file> | <file>にreadパーミッションが与えられている |
| -s <file> | <file>が存在し、且つ空ではない |
| -w <file> | <file>にwriteパーミッションが与えられている |
| -O <file> | <file>の所有者である |
| -G <file> | <file>のグループIDが自分のものと一致する(複数のグループに属している場合はそのいずれかと一致する) |
| <file1> -nt <file2> | <file1>が<file2>よりも新しい(ファイル変更時刻を比較) |
| <file1> -ot <file2> | <file1>が<file2>よりも古い(ファイル変更時刻を比較) |
| 記号 | 意味 |
|---|---|
| arg1 -eq arg2 | arg1 が arg2 に対して等しい |
| arg1 -ne arg2 | arg1 が arg2 に対して等しくない |
| arg1 -lt arg2 | arg1 が arg2 に対して小さい |
| arg1 -le arg2 | arg1 が arg2 に対して小さいか、等しい |
| arg1 -gt arg2 | arg1 が arg2 に対して大きい |
| arg1 -ge arg2 | arg1 が arg2 に対して大きいか、等しい |
※ arg1, arg2 には、正または負の整数を使用出来る。
alias llast1='ls -1tr | tail -1'みたいなことをしている場合に、そのファイルの内容をgrep して別ファイルに保存する場合は、
$ grep hoge `llast1` | grep -v huga > a.logとやってもうまくいかない。
$ cat < `llast1` | grep hoge | grep -v huga | tee a.logとやればうまくいく。または
$ ( cat `llast1` | grep hoge | grep -v huga ) | tee a.logでもうまくいく。
$ ls -a | grep ^\\. # スクリプトに書く場合は、 ^\\. を ^\\\. と書くここで、 "grep ^\." とすると、"." 以外で始まるファイルもリストされてしまうので注意。
$ ls -a | grep ^\\. | grep -v "^\.$\|^\.\.$"
#!/bin/bash
TARGET=${1};
TARGET_FILE=`ls -1tr | tail -${TARGET} | head -1`
echo ${TARGET_FILE};
#!/bin/bash
# find ${@} find -printf "%AY-%Am-%Ad %p\n"; # 最後にアクセスした日付を併記
find ${@} -printf "%TY-%Tm-%Td %p\n"; # 最後に修正した日付を併記