bashシェルスクリプトで引数の取得と空文字を判定する方法

takahashi 著者:takahashi

bashシェルスクリプトで引数の取得と空文字を判定する方法

以前村上さんが 【備忘録】MacのFinderで隠しファイル・フォルダを表示する方法 という記事を投稿されてましたが、自分の場合はこちらの内容を参考に簡単に切り替えれるようにシェルスクリプトでon offをできるようにしています。

とりあえず簡単に作ったのでめっちゃ簡素です(;´∀`)

#!/bin/bash

echo 'please type "true" or "false": '
read com

if [ $com = "false" ]; then 
  defaults write com.apple.finder AppleShowAllFiles FALSE
  killall Finder
  echo "隠しファイルが非表示になりました。"
fi

if [ $com = "true" ]; then
  defaults write com.apple.finder AppleShowAllFiles TRUE
  killall Finder
  echo "隠しファイルが表示されました。"
fi

exit 0

シェルスクリプトを作るとき、とりあえず簡単に作っておこうと思って

コマンド実行->隠しファイルの表示、非表示(true or false)を入力

という作りにしたのですが、これだけの操作でわざわざ2段階にする必要ないよなぁ、と思い、

コマンド true
コマンド false

でできるようにしようと思いました。

bashのシェルスクリプトで引数を認識させるのはとても簡単で、

コマンド 引数1 引数2 ... 引数n

とした場合に、引数の値をとる場合は

引数1: $1
引数2: $2

引数n: $n

という変数でそれぞれ取ることができます。
(引数10個目以降の引数の取得については${10}といった書き方をする必要があるようです。)

ただ、折角コマンド内で入力を読み込む処理も書いてあったので、今回は引数が何も入力されなかった時に、従来のtrue or falseを質問するプロンプトを表示するように変えてみました。

ここで”何も入力されなかった”、つまり空文字を判定する必要が出てきます。

PHPなどでは

//もし空だった場合
if($hoge == "")
{ 
    /*処理*/ 
}

みたいに書きますが、bashの場合は

#hogeが空だった場合は処理を実行
if [ -z "$hoge" ]; then
  #処理
fi

と書きます。
ちなみに、”空でなかった場合”に処理をさせたい場合は

#hogeが空でなかった場合は処理を実行
if [ -n "$hoge" ]; then
  #処理
fi

と書けばよいそうです。

これを踏まえてこんな感じに変更してみました。

#!/bin/bash

com=$1 #引数取得

if [ -z "$com" ]; then #もし引数に値が入ってなければ
  echo 'please type "true" or "false": ' 
  read com #再入力を要求
fi

if [ $com = "false" ]; then #"false"が指定されたら
  defaults write com.apple.finder AppleShowAllFiles FALSE #finderで隠しファイルを隠すコマンドを実行
  killall Finder
  echo "隠しファイルが非表示になりました。"
fi

if [ $com = "true" ]; then #"true"が指定されたら
  defaults write com.apple.finder AppleShowAllFiles TRUE #finderで隠しファイルを表示するコマンドを実行
  killall Finder
  echo "隠しファイルが表示されました。"
fi

exit 0

この内容をテキストファイルとしてユーザーがアクセスできる場所(例えば/usr/local/bin/ とか /opt/ とか)に保存し、”chmod +x”などを行って実行権限を与えておきます。
これでお手軽隠しファイル表示/非表示コマンドの完成です。

bashなどのシェルが使える環境では、こういったシェルスクリプト(バッチファイル)を作っておくことで、複数のコマンドを打たないといけないような操作を1コマンドで済ませたりすることができるようになります。

便利なので是非活用してみてください。

  • この記事いいね! (0)

著者について

takahashi

takahashi administrator

Webエンジニア。 趣味で自宅サーバーを稼働中。 ファンタジーが好き。