Не ls
.
Вместо этого просто дайте оболочке получить все нечетные файлы за вас. Это и безопаснее, и проще:
#!/bin/bash
for picture in *[13579].png
do
mogrify -rotate 90 "$picture"
done
[]
в глобусе оболочки соответствует любому одному из символов внутри, поэтому, перечисляя все нечетные цифры, полный шаблон соответствует любому файлу в текущем каталоге, который заканчивается на odd_digit.png. Нет необходимости поддерживать счетчик выполнения, и, поскольку расширение имени файла (т. Е. Глобализация оболочки) - это последнее, что происходит с командной строкой перед ее выполнением, она не будет вызываться именами файлов с прикольными символами.
Что касается конкретной проблемы с вашим исходным сценарием, то, как указано в строке nullterminated , вам нужны пробелы вокруг [
и ]
в строке if
. Это потому, что [
это не какой-то особый синтаксис для if
, это просто другая команда: /bin/[
, которая является синонимом команды test
. (Ваша оболочка, вероятно, предоставляет собственную встроенную версию [
из соображений производительности, но она должна вести себя так же, как и внешняя команда, включая все ограничения синтаксического анализа.)
Без пробела между [
и "$picture"
вы говорите bash
запустить команду с именем что-то вроде [picture_1.png
с двумя аргументами: ==
и picture_1.png]
. Поскольку у вас, вероятно , нет команды под названием [picture_1.png
на вашем компьютере, ваш скрипт завершается ошибкой.
С пробелами вокруг [
и ]
вы будете запускать команду [
с четырьмя аргументами: picture_1.png
, ==
, picture_1.png
и ]
.