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

Rae*_*gor 4 shell-script mkdir

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

\n
read -p "Enter the name of the folder: " NAMEFOLDER\nread -p "How many copies of this folder do you want?: " NUMFOLDER\n\ni=0\n\nuntil [ $i -gt $NUMFOLDER ]\n\ndo\nmkdir $(($NAMEFOLDER))\n((i=i+1))\ndone\n
Run Code Online (Sandbox Code Playgroud)\n

然后我遇到了这个问题

\n
"mkdir: cannot create directory \xe2\x80\x980\xe2\x80\x99: File exists"\n
Run Code Online (Sandbox Code Playgroud)\n

我被困在这个问题上。

\n

ter*_*don 7

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

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

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

$ echo $((4 + 3 ))
7
Run Code Online (Sandbox Code Playgroud)

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

也许是这样的:

$ echo $((4 + 3 ))
7
Run Code Online (Sandbox Code Playgroud)

你像这样执行:

foo.sh bar 4
Run Code Online (Sandbox Code Playgroud)

并会导致:

$ ls
bar_1  bar_2  bar_3  bar_4
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash

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

mkdir -p "$folderName"
for((i=2; i<=$folderNumber; i++)); do
  mkdir -p "$folderName"_$i
done
Run Code Online (Sandbox Code Playgroud)

结果是:

$ foo.sh bar 4
$ ls
bar  bar_2  bar_3  bar_4
Run Code Online (Sandbox Code Playgroud)