2019/08/15
【shellスクリプト】ユーザーの入力した値を対話的に受け取り、ディレクトリを作成する
- shellスクリプトでユーザーの入力を対話的に受け取るにはどうするんだろう
- また、受け取った値を使って何か作業を行うにはどうすれば良いのだろう
など気になり、実際に作ってみました。
今回は
- ユーザーが文字を入力
- 対話的に受け取って値をチェック
- その値を使ってディレクトリを作成
までを行います。
最低限の入力チェックも同時に行います。
ユーザーの入力を受け取り、値をチェックする
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
上記のように新規でディレクトリが作成されています。