如何使用用户输入的名称和号码创建文件夹

如何使用用户输入的名称和号码创建文件夹

将询问用户 2 个变量,即文件夹的名称和他们想要创建的文件夹的数量。所以如果用户输入sea和3,输出应该是:sea,sea2,sea3

read -p "Enter the name of the folder: " NAMEFOLDER
read -p "How many copies of this folder do you want?: " NUMFOLDER

i=0

until [ $i -gt $NUMFOLDER ]

do
mkdir $(($NAMEFOLDER))
((i=i+1))
done

然后我遇到了这个问题

"mkdir: cannot create directory ‘0’: File exists"

我被困在这个问题上。

答案1

首先,不要让脚本在运行时读取输入。这对于您的用户来说很难使用,因为拼写错误是不可避免的且难以修复,并且也意味着该任务无法轻松重复和自动化。相反,将名称和编号作为命令行参数。

其次,对本地 shell 变量名称使用大写字母是不好的编码风格,因为按照惯例,全局环境变量都是大写的,这可能会导致意外的命名冲突和难以调试的问题。

现在,您真正的问题是您正在使用$((foo))这意味着“视为foo数学表达式并返回其结果”。例如:

$ echo $((4 + 3 ))
7

当然,整个脚本也没有任何意义,因为您无法创建多个具有相同名称的文件或目录。也许您想添加一个计数器?

也许是这样的:

#!/bin/bash

folderName="$1"
folderNumber="$2"

for((i=1; i<=$folderNumber; i++)); do
  mkdir -p "$folderName"_$i
done

你像这样执行:

foo.sh bar 4

并会导致:

$ ls
bar_1  bar_2  bar_3  bar_4

如果您希望创建的第一个目录没有后缀,您可以这样做:

#!/bin/bash

folderName="$1"
folderNumber="$2"

mkdir -p "$folderName"
for((i=2; i<=$folderNumber; i++)); do
  mkdir -p "$folderName"_$i
done

结果是:

$ foo.sh bar 4
$ ls
bar  bar_2  bar_3  bar_4

相关内容