はまりどころ
#!/bin/sh
COMMAND="command 'arga argb'"
$COMMAND
ARGS="'arga argb'"
command $ARGS
が引数だと思われる
`$COMMAND`
動作チェック用
引数出力
#!/bin/sh
while [ $# -gt 0 ]
do
echo $1
shift
done
条件分岐/繰り返し
if 条件 ; then
〜
elif 条件 ; then
〜
else
〜
fi
while 条件 ; do
〜
done
until 条件 ; do
〜
done
for 変数名 in リスト ; do
〜
done
case 文字列 in
パターン)
〜
;;
パターン|パターン)
〜
;;
*)
〜
;;
esac
break
continue
- 条件は test / [] やコマンドの終了コードを使う
- パターンはワイルドカード使用可能
function
# function はなくてもよい
function foo()
{
local x y z
local a=10
return 1
}
test / []
test EXPRESSION
[ EXPRESSION ]
- 変数を使うときは "" で括っておかないとそれがないものとして扱われる
- [ -z ] や [ -n ] は真になるのでハマりどころ
- 引数0個(EXPRESSIONが空)は偽
! EXPRESSION
( EXPRESSION )
EXPRESSION -a EXPRESSION
EXPRESSION -o EXPRESSION
ファイルテスト
-e | 存在 |
-s | サイズ0以上 |
-f | ノーマルファイル |
-d | ディレクトリ |
-b | ブロック特殊ファイル |
-r | 読込可 |
-w | 書込可 |
-x | 実行可 |
文字列比較
-n STRING | 長さ0以上 |
-z STRING | 長さ0 |
STRING = STRING | |
STRING != STRING | |
STRING | 空文字列なら偽 |
数値比較
二重ブラケット
[[ EXPRESSION ]]
- bash zsh など(bshにはない)
- bashとzshで挙動が違う
- manを引いとくのが正解
! EXPRESSION
( EXPRESSION )
EXPRESSION && EXPRESSION
EXPRESSION ll EXPRESSION
ワイルドカード
* | 文字列 |
? | 任意の1文字 |
[...] | []内どれか1文字 |
[^...] | []内以外 |
[!...] | []内以外 |
特殊変数
$? | 最後に実行したコマンドのexit値 |
$$ | シェル自身のプロセスID |
$! | シェルが最後に起動したバックグラウンドプロセスのプロセスID |
$0 | スクリプトの名前 |
$1〜9 | n番目の引数 |
$# | 引数の個数 |
$* | 全引数リスト "〜"中の展開は "$1 $2 … $n" |
$@ | 全引数リスト "〜"中の展開は "$1" "$2" … "$n" |
リダイレクト
OK > /dev/null 2>&1
NG > 2>&1 /dev/null
2>&1 は 2の出力先を1に向ける から。
クオート
- "〜" 中の特殊文字は ` \ $
- `〜` と $(〜) は同じ
グルーピング
(COMMAND)
- サブシェルで実行される
{ COMMAND; }
- カレントシェルで実行される
- {} とコマンドの間にはスペースが必須
- 最後の ; も必須
リンク