生成されたディレクトリを表示するのではなく、ユーザー入力に基づいてディレクトリとサブディレクトリを作成しますか?

生成されたディレクトリを表示するのではなく、ユーザー入力に基づいてディレクトリとサブディレクトリを作成しますか?

私は次のスクリプトを書いた。

はい、このコードが機能していないことを知っています。しかし、私の意見を明らかにすることはできます。

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE"
mkdir -p "$BASE/$BASE1"
mkdir -p "$BASE/$BASE2"
mkdir -p "$BASE/$BASE3"
mkdir -p "$BASE/$BASE4"
mkdir -p "$BASE/$BASE5"
ls -d */

まあ、オンライン調査をしてからグローブを使うべきだと思いましたが、教授が実際にグローブについて言及しませんでした。このスクリプトの要件は、デフォルトのディレクトリ名を要求し、ユーザー入力に基づいてデフォルトのディレクトリと5つのサブディレクトリを作成し、生成されたディレクトリをechoまたはlsコマンドで出力することです。

答え1

$BASE を数字 (1..5) から分離する必要があります。それ以外の場合、sh は、必要なものをたとえば変数として解釈します。あなたに付加的な価値を与えるよりも$BASE1$BASE1

これはスクリプトの修正され、少し改善されたバージョンです。

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE" "$BASE/$BASE"{1..5}
ls -1d $BASE $BASE/*

bash、zsh、ksh、または他のサポートされているシェルを使用していない場合は、{1..5}次のことができます。

echo -n "Please enter your base directory name: "
read BASE
mkdir -p "$BASE" 
for i in 1 2 3 4 5 ; do mkdir -p "$BASE/$BASE$i" ; done
ls -1d $BASE $BASE/*

答え2

では、bash次の操作を行います。

#!/usr/bin/bash
base="$1" #Get it from the argument, prompts for input aren't very unixy
mkdir -p "$base/$base"{1..5}
ls -d */

ではdash利用できないので、{1..5}次のようになります。

for i in `seq 5`; do mkdir -p "$base/$base${i}"; done

関連情報