[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5. 条件

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=Conditions"
"sh-utils/条件"へのコメント(無し)
検索全文Elisp

このセクションは,その出力ではなく,終了ステータスが主に役に立つコマンド を記述します.このためそれらは,シェルのif文の条件やパイプライン の最後のコマンドとしてよく使用されます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.1 false: 何もせず失敗します

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=false+invocation"
"sh-utils/false:何もせず失敗します"へのコメント(無し)
検索全文Elisp

falseは,失敗を意味する1の終了ステータスを返す以外何もしま せん.それは,シェルスクリプトの失敗のコマンドが必要な位置で使用すること が可能です.

falseは,`--help'と`--version'を含む,すべてのコマンド ライン引数を無視し,それは,そうしない場合,プログラマがあてにしている期 待する動作を変更するためです.(2)

このバージョンのfalseは,Cプログラムとして実装されていて,そのた め,シェルスクリプトの実装より安全かつ高速になり,アカウントの使用を禁止 する目的のダミーシェルとして安全に使用できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.2 true: 何もせず成功します

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=true+invocation"
"sh-utils/true:何もせず成功します"へのコメント(無し)
検索全文Elisp

trueは,成功を意味する0の終了ステータスを返す以外何もしませ ん.それは,シェルスクリプトの成功のコマンドが必要な位置で使用することが 可能ですが,シェル組み込みコマンド : (コロン)は同じことをより高速 に行います.

trueは,`--help'と`--version'を含む,すべてのコマンドラ イン引数を無視し,それは,そうしない場合,プログラマがあてにしている期待 する動作を変更するためです.(3)

このバージョンのtrueは,Cプログラムとして実装されていて,そのため, シェルスクリプトの実装より安全かつ高速になり,アカウントの使用を禁止する 目的のダミーシェルとして安全に使用できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.3 test: ファイル形式の調査と値の比較

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=test+invocation"
"sh-utils/test:ファイル形式の調査と値の比較"へのコメント(無し)
検索全文Elisp

条件式exprの評価に依存して,0(真)または1(偽)のステータスを返します. 表現のそれぞれの部分は,分離された引数にする必要があります.

testには,ファイルのステータスの調査,文字演算子,そして数字比較 の演算子があります.

ほとんどのシェルは,同じ名前の組み込みコマンドがあるため,スクリプト内や 対話的に簡素なコマンド名を使用すると,ここで記述するものと異なる機能を得 る可能性があります.

以下のオプションの他に,testは,単独の`--help'や `--version'を受け入れます.See 節 2. 共通のオプション. 単一のオプション なしの引数も可能です.testは,引数がnullでない場合,真を返します.

5.3.1 ファイル形式のテスト  -[bcdfhLpSt]
5.3.2 アクセス許可のテスト  -[gkruwxOG]
5.3.3 ファイルの特徴テスト  -e -s -nt -ot -ef
5.3.4 文字列のテスト  -z -n = !=
5.3.5 数値テスト  -eq -ne -lt -le -gt -ge
5.3.6 testに対する連結  ! -a -o



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.3.1 ファイル形式のテスト

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=File+type+tests"
"sh-utils/ファイル形式のテスト"へのコメント(無し)
検索全文Elisp

これらのオプションは,ファイルの特定の形式をテストします.(ファイルのす べてですが,すべてのファイルが同じではありません!)

`-b file'
fileが存在し,ブロックスペシャルデバイスの場合,真です.

`-c file'
fileが存在し,キャラクタスペシャルデバイスの場合は真です.

`-d file'
fileが存在し,ディレクトリの場合は真です.

`-f file'
fileが存在し,通常のファイルの場合は真です.

`-h file'
`-L file'
fileが存在し,シンボリックリンクの場合は真です.

`-p file'
fileが存在し,名前付きパイプの場合は真です.

`-S file'
fileが存在し,ソケットの場合は真です.

`-t [fd]'
fdが端末上で開かれている場合は真です.fdが省略された場合,そ れはデフォルトで1(標準出力)になります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.3.2 アクセス許可のテスト

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=Access+permission+tests"
"sh-utils/アクセス許可のテスト"へのコメント(無し)
検索全文Elisp

これらのオプションは,特定のアクセス許可をテストします.

`-g file'
fileが存在し,そのセットグループidビットが設定されている場合は真で す.

`-k file'
fileが存在し,スティッキービットが設定されている場合は真です.

`-r file'
fileが存在し,読み込み可能な場合は真です.

`-u file'
fileが存在し,セットユーザidビットが設定されている場合は真です.

`-w file'
fileが存在し,書き込み可能な場合は真です.

`-x file'
fileが存在し,実行可能な場合は真です.

`-O file'
fileが存在し,現在実施中のユーザidに所有されている場合は真です.

`-G file'
fileが存在し,現在実施中のグループidに所有されている場合は真です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.3.3 ファイルの特徴テスト

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=File+characteristics+tests"
"sh-utils/ファイルの特徴テスト"へのコメント(無し)
検索全文Elisp

これらのオプションはその他のファイルの特徴を調査します.

`-e file'
fileが存在している場合は真です.

`-s file'
fileが存在し,大きさがゼロより大きい場合は真です.

`file1 -nt file2'
file1file2より(修正日で)新しい場合は真です.

`file1 -ot file2'
file1file2より(修正日で)古い場合は真です.

`file1 -ef file2'
file1file2が同じデバイスとi-node番号を持つ場合,すなわち, それらがお互いにハードリンクの場合は真です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.3.4 文字列のテスト

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=String+tests"
"sh-utils/文字列のテスト"へのコメント(無し)
検索全文Elisp

これらのオプションは文字列の特徴をテストします.文字列はtestに対 し引用符で囲みませんが,例えばスペースのような,シェルで特別な意味を持つ 文字を保護するために,それらを引用符で囲む必要があるかもしれません.

`-z string'
stringの長さがゼロの場合は真です.

`-n string'
`string'
stringの長さがゼロではないの場合は真です.

`string1 = string2'
文字列が等しい場合は真です.

`string1 != string2'
文字列が等しくない場合は真です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.3.5 数値テスト

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=Numeric+tests"
"sh-utils/数値テスト"へのコメント(無し)
検索全文Elisp

数値の関係です.引数は,完全な数値(負も可能です),または,stringの 長さを評価する特別な式-l stringにする必要があります.

`arg1 -eq arg2'
`arg1 -ne arg2'
`arg1 -lt arg2'
`arg1 -le arg2'
`arg1 -gt arg2'
`arg1 -ge arg2'
これらの算数の二項演算子は,それぞれ,arg1arg2に比べて,等 しい,等しくない,小さい,以下,大きい,または以上の場合に真を返します.

例えば以下のようにします.

 
test -1 -gt -2 && echo yes
=> yes
test -l abc -gt 1 && echo yes
=> yes
test 0x100 -eq 1
error--> test: integer expression expected before -eq



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.3.6 testに対する連結

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=Connectives+for+test"
"sh-utils/testに対する連結"へのコメント(無し)
検索全文Elisp

通常の論理結合子です.

`! expr'
exprが偽の場合は真です.

`expr1 -a expr2'
expr1expr2の両方が真の場合は真です.

`expr1 -o expr2'
expr1またはexpr2のどちらかが真の場合は真です.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.4 expr: 式の評価

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=expr+invocation"
"sh-utils/expr:式の評価"へのコメント(無し)
検索全文Elisp

exprは式を評価し,結果を標準出力に書き出します.それぞれの式のトー クンは,分離している引数にする必要があります.

オペランドは数字または文字列のどちらかになります.exprは,あらゆ るものが,適用されているオペレーションに依存して,整数または文字列がオペ ランドの位置に存在することを強制します.

文字列はexpr対し引用符で囲みませんが,例えばスペースのような,シェ ルで特別な意味を持つ文字を保護するために,それらを引用符で囲む必要がある かもしれません.

演算子は,挿入辞シンボルや前置キーワードとして与えることができます.カッ コは,通常の方法のグループとして使用可能です(しかし,シェルがカッコを評 価することを避けるために,カッコを引用符で囲む必要があります).

終了ステータスは,以下のようになります.

 
0 式がnullでも0でもない場合.
1 式がnullまたは0の場合.
2 有効な式の場合.

5.4.1 文字列式  <colon> match substr index length quote
5.4.2 数式  
5.4.3 exprの関係式  | & < <= = == != >= >
5.4.4 exprの使用例  Examples.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.4.1 文字列式

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=String+expressions"
"sh-utils/文字列式"へのコメント(無し)
検索全文Elisp

exprは,パターンマッチングと,その他の文字列演算子をサポートしま す.これらは,(次のセクションの)数字と関係の両演算子より低い優先順位にな ります.

`string : regex'
パターンマッチングを実行します.引数は文字列に制限され,2番目は, ^が暗黙に前置された(基本的にGNU流のgrepの)正規表現と考慮さ れます.最初の引数は,この正規表現に対し一致の評価がなされます.

一致の評価が成功し,regexが`\('と`\)'を使用している場合, :式は,サブ式に一致したstringの一部となります.それ以外の場 合は一致した文字の数を返します.

一致の評価に失敗した場合,regexで`\('と`\)'が使用されて いれば:演算子はnull文字を返し,それ以外では0を返します.

最初の`\( ... \)'の組のみ,戻り値に関係します.追加の組は,正規 表現演算子のグループ化の意味しかありません.

正規表現内では,\+\?,そして\|は,それぞれ,1以上, ゼロ以上,オア分離の選択肢の演算子です.SunOSとその他のexprはこれ らを通常の文字として扱います.(POSIXは,どちらの動作も許可します.)正規 表現の構文の詳細は,See 節 `Regular Expression Library' in

Regex
.例は5.4.4 exprの使用例,にあります.

`match string regex'
パターンマッチングを行う別の方法です.これは,`string : regex'と同じです.

`substr string position length'
少なくともlengthの長さの,positionから始まる,stringの サブ文字列を返します.positionまたはlengthのどちらかが,負, ゼロ,または数字以外の場合,null文字列を返します.

`index string charset'
charsetの最初の文字が見つかった,stringの最初の位置を返しま す.charsetの文字がstringで見つからない場合は,0を返します.

`length string'
stringの長さを返します.

`quote token'
キーワードのようなmatchや,演算子のような/の場合でも, tokenを文字列として解釈します.これで,expr length quote "$x"expr quote "$x" : '.*/\(.\)'のテストが可能となり,$x の値が(例えば)/indexに偶然なった場合でも,正しくなります. この演算子はGNUの拡張です.環境変数POSIXLY_CORRECTが設定されている ときは,利用不可能です.

exprにキーワードとして文字列を解釈させるために,quote演算 子を使用する必要があります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.4.2 数式

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=Numeric+expressions"
"sh-utils/数式"へのコメント(無し)
検索全文Elisp

exprは,通常の算術演算子をサポートし,優先順位は順に増加します. (前のセクションの)文字列演算子は,より順位の低い演算子で,(次のセクショ ンの)連結子は,より順位が高くなります.

`+ -'
加算と減算です.どちらの引数も数字が強制されます.そうでない場合はエラー を生じます.

`* / %'
乗算,除算,剰余です.どちらの引数も数字が強制されます.そうでない場合は エラーを生じます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.4.3 exprの関係式

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=Relations+for+expr"
"sh-utils/exprの関係式"へのコメント(無し)
検索全文Elisp

exprは,通常の論理結合と関係式をサポートします.これらは(前のセク ションの)文字や数字の演算子より優先順位が高くなっています.ここに,低い 優先順位を最初にしたリストがあります.

`|'
最初の引数がnullや0でない場合はそれを,それ以外では二番目の引数を返しま す.

`&'
どちらの引数もnullや0でない場合は最初の引数を,それ以外では0を返します.

`< <= = == != >= >'
引数を比較し,関係が真の場合は1を,それ以外では0を返します.===の同義語です.exprは最初に,両方の引数を数字に強制し,数 値の比較を行います.どちらかの強制が失敗した場合,辞書的な比較を行います.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

5.4.4 exprの使用例

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=sh-utils-ja&node=Examples+of+expr"
"sh-utils/exprの使用例"へのコメント(無し)
検索全文Elisp

ここに,シェルのメタ文字を引用符で囲むものを含む,いくつかの例があります.

Bourne互換シェルで,シェル変数fooに1を加えます.
 
foo=`expr $foo + 1`

$fnameに保存されているファイル名のディレクトリ以外の部分を, /を含めずに出力します.
 
expr $fname : '.*/\(^.*\)' '^|' $fname

\+が演算子だということを表示する例です.
 
expr aaa : 'a\+'
=> 3

 
expr abc : 'a\(.\)c'
=> b
expr index abcdef cz
=> 3
expr index index a
error--> expr: syntax error
expr index quote index a
=> 0


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]