旋转奇数图片

1 linux bash bash-scripting

我写了一个小脚本来旋转目录的所有奇数图片,但我无法让它工作。这是代码。

#!/bin/bash

count=1

for picture in `ls -v *.png`
do
    if ["$picture" == "picture_$count.png"]
    then
        mogrify -rotate 90 "$picture"
        count=$(($count+2))
    fi
done
Run Code Online (Sandbox Code Playgroud)

有什么建议?

8bi*_*ree 5

不要解析ls

相反,只需让 shell 为您抓取所有奇数文件即可。它既安全又简单:

#!/bin/bash

for picture in *[13579].png
do
    mogrify -rotate 90 "$picture"
done
Run Code Online (Sandbox Code Playgroud)

[]在 shell glob 中匹配任何单个字符,因此通过列出所有奇数数字,完整模式匹配当前目录中以odd_digit .png结尾的任何文件。无需维护运行计数,并且由于文件名扩展(即 shell globbing)是命令行在执行之前发生的最后一件事,因此它不会被带有时髦字符的文件名绊倒。


从而与您的原始脚本的具体问题是什么,它是作为nullterminatedstring指出的那样,你需要周围的空间[,并]在该if行。那是因为[不是 的特殊语法if,它只是另一个命令:/bin/[,它是test命令的同义词。([出于性能原因,您的 shell 可能提供了它自己的内置版本,但它的行为仍应与外部命令相同,包括所有解析限制。)

没有[and之间的空格"$picture",你告诉你bash运行一个命令,类似于[picture_1.png有两个参数的东西:==and picture_1.png]。由于您的计算机上可能没有调用命令[picture_1.png,因此您的脚本将失败。

周围的空间[],你会运行命令[用四个参数:picture_1.png==picture_1.png,和]