- 追加された行はこの色です。
- 削除された行はこの色です。
- シェルスクリプト へ行く。
#contents
* はまりどころ
#!/bin/sh
COMMAND="command 'arga argb'"
$COMMAND
ARGS="'arga argb'"
command $ARGS
- 'arga
- argb'
が引数だと思われる
`$COMMAND`
- 'arga を実行しようとして失敗する
* 動作チェック用
** 引数出力
#!/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
# 返値を設定するだけ
# function を抜けるわけではない
return 0
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 | 空文字列なら偽 |
** 数値比較
| -eq | = |
| -ne | ≠ |
| -lt | < |
| -le | ≦ |
| -gt | > |
| -ge | ≧ |
** 二重ブラケット
[[ 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; }
- カレントシェルで実行される
- {} とコマンドの間にはスペースが必須
- 最後の ; も必須
* リンク
- http://www.rhythm-cafe.com/shell/Default.aspx
- http://members.jcom.home.ne.jp/j-klein/shell/shellscript-basic.html
- http://www.ybi.co.jp/koike/src/BSH.htm
- http://www.klab.ee.utsunomiya-u.ac.jp/~hiroki/csh-whynot.euc
- http://www.netfort.gr.jp/~tomokuni/lms/shell/text/shell.txt
- http://www.netfort.gr.jp/~tomokuni/lms/shell/text/shell2.txt
- http://www.netfort.gr.jp/~tomokuni/lms/shell/text/shell3.txt
- http://www.netfort.gr.jp/~tomokuni/lms/shell/text/shell4.txt