web-dev-qa-db-ja.com

シェルスクリプト:-zおよび-nオプションとif

次の行があるシェルスクリプトがありますif [ -z "$xyz" ]およびif [ -n "$abc" ]、しかし、彼らの目的が何であるかはわかりません。誰か説明していただけますか?

70
user3173953

Bashの演算子 here の非常に良いリファレンスを見つけることができます。別のシェルを使用している場合は、<my Shell> operators必要なものがすべて見つかります。あなたの特定のケースでは、あなたは使用しています:

-n
   string is not null.

-z
  string is null, that is, has zero length

説明する:

$ foo="bar";
$ [ -n "$foo" ] && echo "foo is not null"
foo is not null
$ [ -z "$foo" ] && echo "foo is null"
$ foo="";
$ [ -n "$foo" ] && echo "foo is not null"
$ [ -z "$foo" ] && echo "foo is null"
foo is null
84
terdon

man testまたはman [は、コマンドをテストするためのすべてのオプションを提供します。この場合、-nは$ abcのコンテンツの長さがゼロ以外かどうかを確認するためのテストであり、-zは$ xyzのコンテンツが長さゼロの文字列かどうかを確認するためのテストです。

4
doneal24

terdon's answer を拡張するために、 nix/Linux-チュートリアルポイントのシェル基本演算子 には、ファイル関連の演算子(およびその他の便利な演算子)も含まれていることがわかりました。

-b file     Checks if file is a block special file; if yes, then the condition becomes true.    [ -b $file ] is false.
-c file     Checks if file is a character special file; if yes, then the condition becomes true.    [ -c $file ] is false.
-d file     Checks if file is a directory; if yes, then the condition becomes true.     [ -d $file ] is not true.
-f file     Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true.  [ -f $file ] is true.
-g file     Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true.    [ -g $file ] is false.
-k file     Checks if file has its sticky bit set; if yes, then the condition becomes true.     [ -k $file ] is false.
-p file     Checks if file is a named pipe; if yes, then the condition becomes true.    [ -p $file ] is false.
-t file     Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true.  [ -t $file ] is false.
-u file     Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true.     [ -u $file ] is false.
-r file     Checks if file is readable; if yes, then the condition becomes true.    [ -r $file ] is true.
-w file     Checks if file is writable; if yes, then the condition becomes true.    [ -w $file ] is true.
-x file     Checks if file is executable; if yes, then the condition becomes true.  [ -x $file ] is true.
-s file     Checks if file has size greater than 0; if yes, then condition becomes true.    [ -s $file ] is true.
-e file     Checks if file exists; is true even if file is a directory but exists.  [ -e $file ] is true.
2
JDQ