シェルプログラミング学習(6)

シェルスクリプトの条件テストと比較します

条件のレビュー

これは、様々な条件や各種制御構造バッシュ試験の構造で行い、その後、異なる動作を行うテスト結果に応じて、その他の条件は時々試験を完了するために、ステートメントを組み合わせている場合、プログラムの実行中にエラーを低減するために決定されるべきです。

試験条件の一般的な文法

文法テスト条件 説明
構文1:テスト<テスト式> これは、テストコマンド、条件式の方法を使用してテストです。testコマンドとの間に少なくとも1つの空間「<テスト式>」
構文2:[<テスト式>] これによって達成される[]方法条件テスト式。そして、同じコマンドの使用法をテストする、この方法をお勧めします。[]境界とコンテンツは、少なくとも1つのスペースを持っています
構文3:[[<テスト式>]] これによって達成される[[ ]]方法条件テスト式。[[]]境界線とコンテンツは、少なくとも1つのスペースを持っています
構文4:((<テスト式>)) これによって達成される(())一般的に使用される条件式試験、方法if内のステートメント。(())のスペース遠位を必要としません
  • 中構文1 testコマンドの構文と2は[]等価です。中構文3 [[]]拡大testコマンドのための二重括弧。
  • 図4は、構文で(())計算に使用しました。
  • 二重括弧内に[[]]いくつかの他の場所の構文と区別するようにワイルドカードパターンマッチングに使用することができます。
  • &&||><他のオペレータは、二重括弧に適用することができる{[[]]}が、単一のブラケットに適用することができない[][]一般的に用いられ-a-o(のための-gt整数)、-ltオペレータの代わりに(整数)です。
  • 整数算術関係は、シェルの算術演算子を使用することができます(())

条件模擬試験コマンド

単純な構文とテストした試験条件の例:

test条件测试的语法格式:test 条件表达式
実施例1:テストファイルのファイルが存在します。
test -f file && echo true || echo false # 测试file文件是否存在,,如果存在则输出true,否则输出false
test -f file && echo 1 # 若表达式成功,则输出1
test -f file || echo 0 # 若表达式失败,则输出0
実施例2:テスト文字列の長さが0です。
[root@www ~]# test -z "Miya" && echo true || echo false # 如果测试字符串的长度为0,则表达式成立,因为测试的字符串为Miya,不为0,则表达式的结果为false。
[root@www ~]# test -z "Miya" && echo 1 || echo 0
false

[]ブラケット試験条件及びサンプル文法

语法格式:[ 条件测试表达式 ]   # 中括号两端要有空格
例1:ファイルの存在をテストします:
[ -f file ] && echo 1 || echo 2 # 测试文件file是否存在,存在返回1,不存在返回0。

[]構文二重括弧の試験条件と試料

语法格式:[[ 条件测试表达式 ]]  # 双中括号里的两端也要有空格
[[ -f file ]] && echo 1 || echo 0 # 测试文件file是否存在,如存在则返回1,不存在返回0。

[説明]で[[ ]]、使用できるワイルドカードパターンマッチングなどを、そして&&||><及び他のオペレータがで使用することができる[[ ]]が、適用されていない[ ][ ]一般的に使用される-a-o(のための-gt整数)、 -lt(用整数)、等代わりに、上記のオペレータのための[[ ]]シンボル。一方で[[]]シナリオはあまりありませんが、中に[[]]次のシーンのワイルドカードのマッチング、他のテスト式を置き換えることができない、または[[]]で使用すると、通常の一致にワイルドカード一致が必要な場合。

ファイルのテスト式

一般的なファイルテスト演算子 説明
-dファイル、ディレクトリ ファイルが存在し、ディレクトリが真であること、テスト式テストの確立
-fファイル、ファイル ファイルが存在し、真の正規のファイルです
-eファイル、存在します 真のファイルは、-f、-eがないディレクトリやファイルを識別し、存在します
-rファイル読み取り 真可読ファイルが存在し、
-sファイル、サイズ ファイルが存在し、ファイルサイズが0が真ではありません
-wファイル、書き込み ファイルが存在し、真書き込み可能です
-xファイル、実行可能 真ファイルが存在し、実行可能です
-Lファイル、リンク ファイルが存在し、真のファイルをリンクされています
F1 -nt F2、NTより新しい为 2新しい真のファイルへのファイル1
F1 -otよりOT为古いF2、 2古い真のファイルへのファイル1

ファイルの実際のテスト式

テストファイルの種類

[ -f file ] && echo 1 || echo 0 # 文件为普通文件且存在则输出 1

ファイルが存在するかどうかを確認

[root@mico ~]# [ -f /etc/hosts ]
[root@mico ~]# echo $?
0
[root@mico ~]# [ -f /etc/hosts1 ]
[root@mico ~]# echo $?
1
判断文件是否存在,返回方式
[root@mico ~]# [ -f /etc/hosts ] && echo "文件存在" || echo "文件不存在" 
文件存在
[root@mico ~]# [ -f /etc/hosts1 ] && echo "文件存在" || echo "文件不存在" 
文件不存在

ディレクトリが存在するかどうかを確認

[root@mico ~]# [ -d /tmp ] && echo "目录存在" || echo "目录不存在" 
目录存在
[root@mico ~]# [ -d /tmp1 ] && echo "目录存在" || echo "目录不存在" 
目录不存在

変数を使用して決意方法

dir=/etc1/;[ -d $dir ] && tar zcf etc.tar.gz $dir || echo "$dir目录不存在"

[説明]

  • テストファイルを読み、書き、他の属性を実行し、単にファイルの属性に基づいていないrwx裁判官によって識別され、それは、ユーザーが現在テストを実行していることは本当に対応したファイルのアクセス権に基づいて動作することができるかどうかに依存します。
  • 使用[ ]テストされている対象が可変である場合と、テスト変数ブラケット、引用符を2倍にする必要があります。

テスト式の例特別条件

次の条件がすべて書かれたテスト式に適用され、作業がより一般的にif文の代わりに使用されています。

実施例1:コマンドの実行中に条件1が満たされ、コマンド2,3コマンド:


if文に対応する上で、以下の効果を分析します:

文字列のテスト演算子

2元の整数の比較演算子

[説明]

  • 「=」と「!=」[]内の比較のために使用されますが、[]「>」と「<」記号、文法を与えられていないが、時には逃れ、エスケープする必要がありますとして使用される場合がありが、結果は間違っている可能性があります。
  • シンボルはまた、[]内に「-gt」および「LT」を含む使用されてもよいが、使用することは推奨されません。
  • スペースを持っている必要があり、シンボルの両端を比較。

論理演算子

[説明]

  • 「-A」と「-o」の論理演算子は、括弧[]のために必要。
  • 「&&」と「||」論理演算のために利用可能なシンボルは、[]と(())、外部接続の複数の[]であってもよいです。
  • 【端部は]と[]、スペースがなければならないことに注意してください、しかしため(())が必要。

概要

テスト式試験、[]、[]、(())の概要との差:

おすすめ

転載: www.cnblogs.com/vicodona/p/11212318.html