シェルスクリプトIF文、数値・文字列比較、ファイル・ディレクトリ存在判定

シェルスクリプトのif文。数値や文字列、ファイル/ディレクトリの判定などいろいろできますが、オプションがややこしく。
ということで、メモ。

数値・文字列の判定

数値・文字列の共通演算子
演算子説明
-eq, =一致の場合、真
-ne, !=不一致の場合、真
-gt
-ge>=
-lt
-le<=

文字列の長さ判定
演算子説明
-z文字列長がゼロ場合、真
-n文字列長がゼロより大きい場合、真

数値、文字列とも不等号記号(<、>)は使えない。>を使った場合、リダイレクトとして作用する。否定は、演算子の前に!(! -eq)。

また、文字列が未定義の場合はexpression expectedやoperator expectedなどのエラーがでる。この場合はダブルクォートで囲む必要がある。より古い書き方として、"X$STR" = "X" のようにされる場合もある。実行例は下記に。
if.sh
  1:
  2:
  3:
  4:
  5:
  6:
  7:
  8:
  9:
 10:
 11:
#!/bin/sh

STR=
TEST="str test1"
if [ $STR = "" ]; then
    echo "$TEST: true"
fi
TEST="str test2"
if [ "$STR" = "" ]; then
    echo "$TEST: true"
fi
実行結果
$ ./if.sh
./if.sh: line 5: [: =: unary operator expected
str test2: true


ファイル・ディレクトリの判定

演算子説明
-f対象がファイルの場合、真
-d対象がディレクトリの場合、真
-e対象が存在する場合、真
-r対象にread権限がある場合、真
-w対象にwrite権限がある場合、真
-x対象に実行権限がある場合、真
-f、-d 以外はファイル・ディレクトリに利用可能。否定は、演算子の前に!(! -f)。
実行例は下記
  1:
  2:
  3:
  4:
  5:
  6:
  7:
  8:
  9:
 10:
 11:
 12:
 13:
 14:
 15:
 16:
 17:
 18:
 19:
 20:
#!/bin/sh

if [ -f file1.txt ]; then
    echo "file1.txt is file"
fi
if [ ! -f file1.txt ]; then
    echo "file1.txt is NOT file"
fi
if [ -d file1.txt ]; then
    echo "file1.txt is dir"
fi
if [ -d dir1 ]; then
    echo "dir1 is dir"
fi
if [ -e file1.txt ]; then
    echo "file1.txt exist"
fi
if [ -e dir1 ]; then
    echo "dir1 exist"
fi
実行結果
user01@PC01[if_test]$ ll
total 13
drwxr-xr-x+ 1 user01 None    0 Jul 21 21:55 .
drwxr-xr-x+ 1 user01 None    0 Jul 21 20:38 ..
d-wx-wx-wx+ 1 user01 None    0 Jul 21 20:39 dir1
-rw-r--r--  1 user01 None    5 Jul 21 20:38 file1.txt
-rwxr-xr-x  1 user01 None 1447 Jul 21 21:55 if.sh

$ ./if.sh
file1.txt is file
dir1 is dir
file1.txt exist
dir1 exist


久々のネタは、超初歩的ifでご機嫌を伺ってみました。
関連記事

Comment

(編集・削除用)
管理者にだけ表示を許可

Trackback

URL
https://nosource.blog.fc2.com/tb.php/113-ef62b197
この記事にトラックバック(FC2Blog User)

カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
261位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
47位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm