BASH Цикл с двумя переменными
Здравствуйте, уважаемые форумчане. Возникла трудность в решении (скорее всего) банальной задачи. Есть две папки с графическими файлами. Необходимо массово объединить изображение из одной папки с изображением из другой. Для решения этой задачи был написан скрипт:
#!/bin/bash
ls_png=$(ls 01/*.png)
echo "$ls_png" > png_list.txt
file_png="png_list.txt"
ls_gif=$(ls 02/*.gif)
echo "$ls_gif" > gif_list.txt
file_gif="gif_list.txt"
for png in `cat $file_png`; do
for gif in `cat $file_gif`; do
convert $png $gif -geometry 458x154+430+1276 -composite out/$png
done
exit
Но скрипт работает не корректно. В результате его выполнения получается, что первое изображение из папки «02» накладывается на все изображения из папки «01», а необходимо так, чтобы первое изображение из папки «02» оказалось поверх первого из папки «01», затем второе из папки «02» поверх второго из папки «01» и так далее. Помогите, пожалуйста, решить данную проблему. (Читал руководство https://rus-linux.net/nlib.php?name=/MyLDP/BOOKS/Bash-Guide-1.12-ru/bash-guide-index.html, разные, схожие по теме, посты на форумах, но гуманитарный склад ума и ограниченные временные сроки, не позволяют самостоятельно решить проблему)
РЕШЕНИЕ!
#!/bin/sh
PNG=()
GIF=()
for p in 01/*.png; do PNG+=("$p"); done
for p in 02/*.gif; do GIF+=("$p"); done
i=0
while [ -f "${PNG[$i]}" ]; do
p="${PNG[$i]}"
[ -f "${GIF[$i]}" ] && convert "$p" "${GIF[$i]}" -geometry 458x154+430+1276 -composite out/${p#01/}
i=$[$i+1]
done
exit
Для тех, кто всегда запускал скрипты через
sh script_name.sh
правильно (в данном случае)
bash script_name.sh