Самое простое решение включает правку в файл XML: содержат частоты/тайм-аут/командные тег внутри другого тега:
xmlstarlet sel -t -m /Config/x -v FREQUENCY -o : -v TIMEOUT -o : -v COMMAND -nl <<END
<Config>
<x>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>60</TIMEOUT>
<COMMAND>/opt/test1.sh</COMMAND>
</x>
<x>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>30</TIMEOUT>
<COMMAND>/opt/test2.sh</COMMAND>
</x>
</Config>
END
EVERYTIME:60:/opt/test1.sh
EVERYTIME:30:/opt/test2.sh
В противном случае, если ваш xml-файл является простым (и I loathe с использованием инструментов обработки текста на xml):
awk -F '[<>]' -v OFS=: '
$2 == "FREQUENCY" {f=$3}
$2 == "TIMEOUT" {t=$3}
$2 == "COMMAND" {c=$3}
f && t && c {print f,t,c; f=t=c=""}
' <<END
<Config>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>60</TIMEOUT>
<COMMAND>/opt/test1.sh</COMMAND>
<FREQUENCY>EVERYTIME</FREQUENCY>
<TIMEOUT>30</TIMEOUT>
<COMMAND>/opt/test2.sh</COMMAND>
</Config>
END
EVERYTIME:60:/opt/test1.sh
EVERYTIME:30:/opt/test2.sh
В любом случае, вы можете перенаправить вывод в:
... | while IFS=: read freq timeout cmd; do
something with "$freq" "$timeout" "$cmd"
done
Не можете вы просто сделать 2 линии ввода в обычном текстовом файле и затем обработать с 'while read line; do eval $ line; done <$ file'? Удачи. – shellter