私は次のスクリプトを書いた。
はい、このコードが機能していないことを知っています。しかし、私の意見を明らかにすることはできます。
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
。$BASE
1
これはスクリプトの修正され、少し改善されたバージョンです。
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