Shell脚本使用mkdir创建文件夹时遭遇语法错误求助
Shell脚本使用mkdir创建文件夹时遭遇语法错误求助
嘿,我来帮你排查下这个语法错误的问题!从你给出的报错信息和代码片段来看,这里有好几个小细节没处理对,咱们一个个说清楚:
- 循环语法不完整:Shell的for循环必须用
do和done把循环体包起来,你直接在for语句后面写mkdir,解释器根本不知道这是循环的一部分,这就是你看到“unexpected token `mkdir'”的核心原因。 - for循环的范围写法错了:你写的
{1...1}是三个点,正确的范围表达式应该是两个点{1..1},三个点会被当成普通字符串,循环逻辑直接乱掉。而且你循环定义的变量是i,但后面用的是x,变量也没对应上哦。 - 变量赋值和算术运算写错了:Shell里给变量赋值不能加
$,算术运算也不能用($x + $1)这种格式,正确的写法应该是x=$((x + 1))或者let x=x+1。
给你改了个基础版的脚本示例,先实现循环创建文件夹的功能:
#!/bin/bash # 初始化计数变量 x=1 # 这里示例循环3次,你可以把{1..3}改成你想要的范围 for i in {1..3}; do mkdir "folder$x" # 让计数变量自增 x=$((x + 1)) done
如果你是想做递归创建文件夹(比如在folder1里再建folder2,folder2里再建folder3这种嵌套结构),可以试试递归函数的写法:
#!/bin/bash # 定义递归创建文件夹的函数 create_nested_folders() { local current=$1 local max=$2 # 创建当前层级的文件夹 mkdir "folder$current" # 进入这个文件夹,如果进入失败就退出(避免权限问题) cd "folder$current" || exit # 还没到最大层数的话,继续递归创建下一层 if [ $current -lt $max ]; then create_nested_folders $((current + 1)) $max fi } # 调用函数,比如从第1层创建到第5层 create_nested_folders 1 5
备注:内容来源于stack exchange,提问作者Is Linus A Instrument
相关产品推荐
相关产品推荐

