我有以下sh脚本:
#!/bin/sh -e
UPLOAD_DIR="/var/www/upload"
mkdir -p "${UPLOAD_DIR}"{0..99} && chown -R www-data "${UPLOAD_DIR}"/*
但是,上面的脚本不是创建从0到99的目录,而是生成名为{0..99}
的单个文件夹。我做错了什么?
01
,02
... 10
,11
?
答案 0 :(得分:3)
将您的shebang更改为#!/bin/bash
以使用brace expansion:
#!/bin/bash -e
upload_dir='/var/www/upload'
mkdir -p "${upload_dir}"/{0..99} && chown -R www-data "${upload_dir}"/{0..99}
此功能在ksh和zsh中也可用(可能更多)但是当您使用bash标记时,我认为您想要使用它。
顺便说一句,您的代码中存在一个微妙的错误 - 参数中有/
传递给chown
而不是mkdir
。我还将您的变量名称更改为小写,因为全部大写的变量名称应保留给shell internal和system-wide environment variables。
大括号扩展的一个不错的功能是,您可以使用{{1}生成序列00
,01
,02
,..
,99
}}。请注意,这需要一个新版本的bash(版本4+,我被告知)。
感谢mklement0提供有用的输入。
答案 1 :(得分:0)
或者......,让它成为一个功能,所以如果你正在运行bash,那么你不必担心需要sh-bang:UNTESTED。
md_chown () { mkdir -p "$1"/{00..99} && chown -R www-data "$1"/{00..99}; }
并调用:
md_chown /var/www/upload