中野's workspace

  • Profile
  • Privacy
  • Contact

2019/08/15

【shellスクリプト】ユーザーの入力した値を対話的に受け取り、ディレクトリを作成する

  • #shell
  • #tips

目次

  • shellスクリプトでユーザーの入力を対話的に受け取るにはどうするんだろう
  • また、受け取った値を使って何か作業を行うにはどうすれば良いのだろう

など気になり、実際に作ってみました。

今回は

  1. ユーザーが文字を入力
  2. 対話的に受け取って値をチェック
  3. その値を使ってディレクトリを作成

までを行います。

最低限の入力チェックも同時に行います。

ユーザーの入力を受け取り、値をチェックする

shell内でread inputと書くとユーザーの入力を受け取ることが出来ます。

ユーザーの入力を受け取り、空であるかをチェックしたい場合下記のように書きます。

mkdir.sh
    while : 
    do
        echo "何か文字を入力してね!"
        read input

        if [ -z $input ] ; then
            echo "空文字はダメです。"
        else
            echo $input
            exit 0
        fi
    done

if [ -z $input ] ; then で入力値のチェックを行っています。

whileで条件式をループし続けているので、何か値が入力されない限りこのスクリプトはユーザーの入力を待ち続けます。

何か文字が入力された時点でその値を出力し、スクリプトを終了させています。

ディレクトリを作成する

先ほど入力値を受け取るスクリプトが出来たので、その値を元にディレクトリを作成します。

ディレクトリ作成はmkdir hogeで出来るのですが、既に存在しているかどうかもチェックしなければなりませんね。

下記が完成系のshellスクリプトです。

mkdir.sh
#/bin/bash

function createDirectory() {
    while : 
    do
        echo "何か文字を入力してね!"
        read input

        if [ -z $input ] ; then
            echo "空文字はダメです。"
        else
            break
        fi
    done

    if [[ ! -d $input ]]; then
        # ディレクトリが存在しない場合のみ実行する
        mkdir $input
        echo "ディレクトリを作成しました"
    else
        echo "既に存在するディレクトリ名です。"
    fi
}

createDirectory

長くなったのでcreateDirectory関数を作成して実行していますが、ここはお好みで。

if [[ -d "hoge" ]]; then で文字列がディレクトリ上に存在するかをチェックすることが出来ます。

今回は入力値がディレクトリに存在しない場合のみディレクトリを作成したいため、

if [[ ! -d $input ]]; thenとしています。

root/
 ├ src/
 └ mkdir.sh

上記のようなディレクトリ構成の場合に、作成したシェルを実行してみましょう。

$ sh mkdir.sh 
何か文字を入力してね!
src
既に存在するディレクトリ名です。

既に存在しているディレクトリ名を入力した場合は、何もせず終了します。

$ sh mkdir.sh 
何か文字を入力してね!
test
ディレクトリを作成しました

存在していないディレクトリ名を入力した場合、ディレクトリ作成メッセージが表示され、

root/
 ├ test/
 ├ src/
 └ mkdir.sh

上記のように新規でディレクトリが作成されています。

このエントリーをはてなブックマークに追加