У меня есть функция 'exit_status', которая принимает два аргумента. $ 1 - это каталог (для резервного скрипта rsync) и $ 2 (getStatus) используется для установки статуса выхода ls на $ 1 и возврата значения вызывающему. Если статус выхода равен 0, начнется резервное копирование.Выход из команды ls по позиционным параметрам
Я хотел бы переписать эту функцию, чтобы получить не менее 3 позиционных параметров, путь источника и назначения и вернуть статус выхода. Я хотел бы, чтобы функция могла обрабатывать событие, в котором я хочу передать более двух каталогов для проверки. Возможно, я могу передать несколько исходных каталогов и пункт назначения.
Я не настроен на функцию, возвращающую статус выхода, но я просто ищу лучший способ проверить, что все каталоги имеют статус выхода 0, чтобы вызывающий выполнял резервную копию. Если один или несколько каталогов имеют ненулевой возврат к выходу.
#!/usr/bin/bash
# Drive paths
testOffSiteBkup1="/mnt/hotswp/testoffsitebkup1/"
exit_status() {
local _cmd="/bin/ls -al $1 > /dev/null"
local _getStatus=$2
eval $_cmd
local _status=$?
eval $_getStatus=$_status
}
exit_status $testOffSiteBkup1 getStatus
if [ $getStatus -eq 0 ] ; then
echo "$testOffSiteBkup1 is present."
rsync ......
else
echo "$testOffSiteBkup1 is NOT present."
exit
fi
Как Фирма вы используете bash? Я считаю, что чистые сценарии оболочки начинают разваливаться по мере увеличения сложности, когда использование чего-то вроде Perl или Python приходит в свои руки. – Sobrique
Нет причины * поместить эту команду 'ls' в строку, а затем использовать' eval' it. Не делай этого. Также почему вы беспокоитесь об этом, если можете просто вернуть значение из функции напрямую? –
Вы знаете переменную '$?' В оболочке? Это возвращаемое значение (0-255) из ранее выполненного cmd. Вы всегда можете захватить это и обработать его логикой состояния. В качестве минимального случая: '/ bin/ls notesuch; ls_stat = $ ?; case $ ls_stat in 0) echo ok ;; *) echo err = $ ls_stat ;; esac' Удачи. – shellter