根据用户输入创建目录和子目录而不是显示创建的目录?

根据用户输入创建目录和子目录而不是显示创建的目录?

我写了这个脚本:

是的,我知道这段代码不起作用,但也许我可以表达我的观点。

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 */

好吧,做了一些在线研究,我想我可能需要使用 glob,但我的教授确实没有提到它们。该脚本的要求是它要求提供一个基本目录名称,然后根据用户输入创建一个基本目录加上 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 或任何其他支持的 shell,{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

相关内容