bash

[bash]switch文, read, ディレクトリ一覧 使用したbash文法を解説!

みなさん、こんにちは。どんぶラッコです。

先週土曜日にこのようなコマンドを作成してみました。

こちらの解説動画にもあるように、指定したディレクトリ内のプロジェクトを検索・数字を選択するとエディタが開くようなものです

リポジトリはこちらです。(README.md はまだ作っていませんが…)

私は普段javascript, php を記述しているので、bashを書いているときに詰まったポイントがありました。

本日はそのポイントをいくつかご紹介します!

引数で条件分岐

if [ $# -ge 1 ]; then
  case "$1" in
    "-d" | "--directory")
      open_dev_directory
      ;;
    "-w" | "where") echo `dirname $0`;;
  esac
fi

ここでのポイントは $# -ge 1 です。この意味は、引数が1以上の場合です。 gegreater or equal の略ですね。 >= ということです。

例えば、この例で言うと op -d のようにオプションをつけると open_dev_directory 関数が発火します。

文字の読み取り

read コマンドで読み取ることができます。

今回の場合は、1文字毎に発火させたいので、最大文字数を指定しています。

書き方はこの通り。

  read -n 1 -p "Project Name: ${input_name}${pick_candidate_projects}" -s input_char
  • -n … nchars 入力文字数
  • -p … prompt プリフィックスで表示する文字列
  • -s … secure input 代入する変数

というオプションを使っています。

ディレクトリ一覧をfor文で取得

  projects=()
  for path in $dir_name/*; do
    if [ -d $path ]; then # if diretory
      project_name=$(basename $path)
      if [ -z "$1" ] || [[ $project_name == "$1"* ]]; then #$1は引数, -z はnull判定
        projects+=("$project_name")
      fi
    fi
  done

今回はディレクトリの検索をしたいので、ディレクトリをfor文で取得する構文を書きました。

ポイントは for path in $dir_name/*; です。 ディレクトリパスを指定した後にワイルドカード ( * )を指定すると一覧を取得してくれるんですね。


他にもポイントがあったのでまた別の記事でご紹介します!

ABOUT ME
どんぶラッコ
ECコンサルタント、システムエンジニアを経て、quintet株式会社CTOに就任。普段はNuxt.jsやLaravelを使用しています。

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
RELATED POST

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です