Сравнение строк в bash
Есть код
#!/bin/bash
SRCD='/media/sysadmin2/Data/autodialer/' #исходная директория
RCVD='/media/sysadmin2/Data/autodialer/backup/' #принимающая директория
LOCK='/media/sysadmin2/Data/autodialer/backup/zvonar.lock'
if [ -z "$(ls -A ${SRCD})" ]; then # если пусто, то выходим
exit 0
else # инчае проверяем lock файл
if [[ -f $LOCK ]]; then # если есть lock файл, оповещаем и выходим
echo "Копирование невозможно! Файл уже занят другой программой"
exit 0
else # если нет то копируем файл и запускаем работу
# rsync -aAv --delete-after --ignore-errors ${SRCD}*.txt ${RCVD}
# rm -f ${SRCD}*.txt
# chmod 644 ${RCVD}*.txt
# chown asterisk:asterisk ${RCVD}*.txt
# nohup ${RCVD}zvonar.sh > ${RCVD}zvonar.log &
filename=$(basename ${RCVD}*.txt)
result="${filename%.*}"
echo $result
if [ $result == 'diallist' ]; then
echo "diallist верен"
elif [ $result == 'tel' ]; then
echo "tel верен"
else
echo "FAIL"
fi
fi
fi
В директории RCVD есть 2 файла diallist.txt и tel.txt Я пытаюсь сравнить строки и вывести результать в echo Но скрипт проверяет только один файл а не все какие там есть. Как сделать чтобы скрипт вывел результат для обоих файлов?
Пробовал добавить цикл, но тогда для второго файла выводит FAIL
for file in ${RCVD}*.txt; do
filename=$(basename $file)
result="${filename%.*}"
if [ $result == 'diallist' ]; then
echo "diallist верен"
# nohup ${RCVD}zvonar.sh > ${RCVD}zvonar.log &
elif [ $result == 'tel' ]; then
echo "tel верен"
# nohup ${RCVD}zvonar.sh > ${RCVD}zvonar.log &
else
echo "FAIL"
fi
done
Ответы (1 шт):
Автор решения: Игнатий Шиленин
→ Ссылка
Вопрос решил с помощью цикла for. Оказалось имя файла было другим:)
Решил свою проблему таким образом
#!/bin/bash
SRCD='/media/autodialer/' #исходная директория
RCVD='/etc/asterisk/script/zvonar/' #принимающая директория
LOCK='/media/autodialer/zvonar.lock' #файл блокировки
if [ -z "$(ls -A ${SRCD})" ]; then # если пусто, то выходим
exit 0
else # инчае проверяем lock файл
if [[ -f $LOCK ]]; then # если есть lock файл, оповещаем и выходим
echo "Копирование невозможно! Файл уже занят другой программой"
exit 0
else # если нет то копируем файлы и запускаем работу zvonar, предварительно назначив разрешения всем txt файлам
rsync -aAv --delete-after --ignore-errors ${SRCD}*.txt ${RCVD}
rm -f ${SRCD}*.txt
chmod 644 ${RCVD}*.txt
chown asterisk:asterisk ${RCVD}*.txt
for file in ${RCVD}*.txt; do # пробегаемся по всем файлам в директории и сравниваем по условию. Исходя из условия выполняем тот скрипт который нужно в фоновом режиме
filename=$(basename $file)
result="${filename%.*}"
if [ $result == 'IT_diallist' ]; then
nohup ${RCVD}zvonar_it.sh > ${RCVD}zvonar.log &
elif [ $result == 'DR_diallist' ]; then
nohup ${RCVD}zvonar_dr.sh > ${RCVD}zvonar.log &
else
exit 0
fi
done
fi
fi
IT_diallist и DR_diallist это имена файлов которые используются у меня. Циклом for я перебрал все файлы с расширением *.txt и сравнил с тем что у меня написано в условии программы