Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2832

もうシェルスクリプトのIFで迷わないための逆引きレシピ

$
0
0

IF文

書き方

if[条件式 ];then
  処理
elif[条件式 ];then
  処理
else
  処理
fi

具体例

if[$NUM-eq 0 ];then# $NUMが0と一致した場合echo"Succeed"elif[$NUM-eq 1 ];then# $NUMが1と一致した場合echo"Cleared"else
  echo"Failed"fi

注意点

  • [の直後と]の直前には半角スペースが必要
  • testコマンドの略式なので,testコマンドでも同様に書き換え可能

条件式の書き方

文字列の比較

文字列の比較には =!=を使う.

if[$STR="sunny"];then
  echo"Succeed"elif[$STR!="rainy"];then
  echo"Cleared"else
  echo"Failed"fi

数値の比較

数値の比較には -eq-neを使う.

Pythonシェルスクリプト
==-eq
>=-ge
>-gt
!=-ne
if[$NUM-eq 0 ];then
  echo"NUM == 0"elif[$NUM-gt 10 ];then
  echo"NUM > 10"fi

gtはgreater thanなので,逆向きの演算子として -lt-leがある.

論理演算(AND/OR/NOT)

論理演算子は以下がサポートされている.

Pythonシェルスクリプト
and-a
or-o
not!
if[$NUM-eq 0 -a$STR="foo"];then
  echo"NUM == 0 and STR == foo"elif[$NUM-gt 10 -o!$FLAG];then
  echo"NUM > 10 or not FLAG"fi

変数が定義済みか

文字列(変数 STR)の長さが0(空)である場合にTRUE → -z

if[-z"$STR"];then
  echo"Zero"fi

文字列(変数 STR)の長さが0(空)でない場合にTRUE → -n

if[-n"$STR"];then
  echo"Nonzero"fi

正規表現による比較

exprコマンドで正規表現の比較ができる.

if expr"123-4567" : "^[0-9]\{3\}-[0-9]\{4\}";then
  echo"True"else
  echo"False"fi

bashやzshであれば [[ $target =~ REGEX ]]のように書くことで正規表現で比較できるらしい.

シェルスクリプトでの正規表現を使ったバリデーション - unhurried

ファイル/ディレクトリの存在

ファイルまたはディレクトリ datが存在する場合にTRUE → -e

if[-e"dat"];then
  echo"Existing"fi

ファイル 1.txtが存在する場合にTRUE → -f

if[-f"1.txt"];then
  echo"Existing file"fi

ディレクトリ samplesが存在する場合にTRUE → -d

if[-d"samples"];then
  echo"Existing dir"fi

コマンドの実行結果

$?を使えば直前のコマンドの実行結果を確認できる.

mkdir sample  # 直前のコマンドif[$?-eq 0 ];then
  echo"OK"else
  echo"NG"fi

ワンライナーで書く方法もある.

mkdir sample &&echo"OK"||echo"NG"

複数ならべる時はカッコをつければよい.

mkdir sample &&(echo"OK1"&&echo"OK2")||(echo"NG1"&&echo"NG2")

参考URL


Viewing all articles
Browse latest Browse all 2832

Latest Images

Trending Articles