シェルスクリプト

Top / シェルスクリプト

はまりどころ

#!/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

	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〜9n番目の引数
$#引数の個数
$*全引数リスト "〜"中の展開は "$1 $2 … $n"
$@全引数リスト "〜"中の展開は "$1" "$2" … "$n"

リダイレクト

OK > /dev/null 2>&1
NG > 2>&1 /dev/null

2>&1 は 2の出力先を1に向ける から。

クオート

  • "〜" 中の特殊文字は ` \ $
    • 変数展開、コマンド展開が行われる
  • `〜` と $(〜) は同じ

グルーピング

(COMMAND)
  • サブシェルで実行される
    { COMMAND; }
  • カレントシェルで実行される
  • {} とコマンドの間にはスペースが必須
  • 最後の ; も必須

リンク


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-01-12 (木) 21:45:39 (4149d)