
将询问用户 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