用于按升序创建多个图像文件的shell脚本

用于按升序创建多个图像文件的shell脚本,shell,for-loop,scripting,Shell,For Loop,Scripting,问题是,我正在尝试编写一个shell脚本,它以升序创建多个图像文件,但是,只有一个数字的文件必须先带零。我是一个初学者,在互联网上搜索,我发现在索引系统上有一些语法差异,所以在我的计算机上,下面的语法很好,但我相信有更好的方法。就这样: for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do if (${i:0:1} == "0") then touch "0${i}.jpg" else touch "$i.

问题是,我正在尝试编写一个shell脚本,它以升序创建多个图像文件,但是,只有一个数字的文件必须先带零。我是一个初学者,在互联网上搜索,我发现在索引系统上有一些语法差异,所以在我的计算机上,下面的语法很好,但我相信有更好的方法。就这样:

for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  do
    if (${i:0:1} == "0") then
      touch "0${i}.jpg"
    else
      touch "$i.jpg"
    fi
  done
它返回错误的替换。这种方法有什么问题吗

for i in {0..15}; do printf -v name "%02i.jpg" $i; touch "$name" ; done
或者,如果更容易阅读:

for i in {0..15}; do 
    printf -v name "%02i.jpg" $i
    touch "$name"
done
完成此操作后,将创建以下文件:

$ ls
00.jpg  01.jpg  02.jpg  03.jpg  04.jpg  05.jpg  06.jpg  07.jpg  08.jpg  09.jpg  10.jpg  11.jpg  12.jpg  13.jpg  14.jpg  15.jpg
解释 对于{0..15}中的i;做

这将启动循环

printf-v名称%02i.jpg$i

这将创建具有所需格式的shell变量名。%02i指示printf在两个空格中用零填充写出数字

触摸$name

这将创建文件

完成

这表示循环结束

可供替代的 从问题中的脚本开始,需要对if语句进行一些更改。以下工作:

for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
do
    if [ "$i" -le 9 ]; then
      touch "0${i}.jpg"
    else
      touch "$i.jpg"
    fi
done

不要缠绕在if条件周围。如果[${i:0:1}=0]使用;然后但您也可以直接将前导零放在for列表中,和/或使用printf“%02d”$i获取格式化的数字。谢谢您的解释!但它在这里仍然不起作用。当我运行sh sc.sh时,它报告:sc.sh:2:printf:非法选项-v touch:无法触摸“”:没有这样的文件或directory@flpost请试试bash sc.sh。如果这不起作用,请告诉我您使用的是什么操作系统,如果您知道,您的默认shell是什么。@flpost另外,您是否可以引用sc.sh的完整第2行?@flpost另一种可能是尝试更新答案中的代码修订版本。它完全避免了printf。运行bash sc.sh仍然不起作用。我使用的是Mint 17,默认shell是/bin/bash。显然,当我用括号代替括号时,它接受了。