A co powiecie na to?
# array=( a b c )
-sh: syntax error: unexpected "("
](openSUSE Forums)Na routerze, na który pisałem poprzedni skrypt (Sumy kontrolne sum kontrolnych)](openSUSE Forums), mam taką sytuację:
# /bin/sh --version
/bin/sh --version
BusyBox v1.35.0 (2022-01-07 12:12:12 +04) built-in shell (ash)
więc nie mogę się na nim posłużyć tablicami w takiej postaci, jak je można wyrazić w Bashu (bo go tam nie ma!), tak jak np. tu: Iterowanie po tablicach w Bashu. Z drugiej strony jak przeczytamy uważnie ten wpis i go zrozumiemy, to okaże się, że nie jesteśmy w sytuacji bez bogatszego interpretera bezbronni.
Zaadaptujmy na nasze ograniczone warunki skrypt do pobierania jeosa. Przeróbmy go tak, by pobierał aktualne snapszot jeosa tumbleweed i iso instalacyjne do kompletu.
- Tu uwaga: alias openSUSE-Tumbleweed-DVD-x86_64-Current.iso zachowuje się analogicznie do opisanego wcześniej openSUSE-Tumbleweed-JeOS.x86_64-kvm-and-xen.qcow2, więc się nie powtarzam. ]]*
Czyli nasza logika to:
- przerobić istniejący skrypt na funkcję do pobierania różnych plików,
- do funkcji pobierającej plik przekazać informację albo o iso albo o snapszocie jeosa.
**Co z tablicami
**
# konwencja:
# zmienna="nazwa_pliku katalog_źródłowy katalog_docelowy"
appliance="openSUSE-Tumbleweed-JeOS.x86_64-kvm-and-xen.qcow2 http://ftp.gwdg.de/pub/linux/suse/opensuse/tumbleweed/appliances /tmp/mnt/sda1/ftp/pub/linux/suse/opensuse/tumbleweed/appliances"
iso="openSUSE-Tumbleweed-DVD-x86_64-Current.iso http://ftp.gwdg.de/pub/linux/suse/opensuse/tumbleweed/iso /tmp/mnt/sda1/ftp/pub/linux/suse/opensuse/tumbleweed/iso"
Tylko gdzie tu jest tablica?
Odpowiem w ten sposób:
_downloadFile () {
FILENAME=$1
WEBRESOURCE=$2
TARGETDIR=$3
}
I wywołanie:
_downloadFile $appliance
_downloadFile $iso
Mamy zindeksowane ciągi i możemy do żądanego ciągu się odnieść?
Mamy i możemy!
Mało tego, ten przykład daje perspektywę używania przecinka, średnika, itp. jeżeli taka konieczność w przyszłości by się pojawiła.
Całość skryptu
#!/bin/sh
# a script keep tumbleweed distribution files up to date
# v0.2; 01/07/2022
SCRIPTNAME=$0
TMPDIR="/tmp/mnt/sda1/tmp"
LOG="/tmp/mnt/sda1/var/log/$(echo ${SCRIPTNAME} | sed 's/.*\///').log"
# files definition
appliance="openSUSE-Tumbleweed-JeOS.x86_64-kvm-and-xen.qcow2 http://ftp.gwdg.de/pub/linux/suse/opensuse/tumbleweed/appliances /tmp/mnt/sda1/ftp/pub/linux/suse/opensuse/tumbleweed/appliances"
iso="openSUSE-Tumbleweed-DVD-x86_64-Current.iso http://ftp.gwdg.de/pub/linux/suse/opensuse/tumbleweed/iso /tmp/mnt/sda1/ftp/pub/linux/suse/opensuse/tumbleweed/iso"
_log () {
echo "$(date +"%Y%m%d.%H%M%S") :: ${SCRIPTNAME} :: $*" >> ${LOG}
}
_downloadFile () {
FILENAME=$1
WEBRESOURCE=$2
TARGETDIR=$3
RET=1
while $RET -eq 1 ]; do
! -f ${TMPDIR}/${FILENAME}.sha256 ] || ! -f ${TMPDIR}/${FILENAME} ]
$? -eq 0 ] && RET=0
rm -f ${TMPDIR}/${FILENAME}* && _log "${TMPDIR} cleaned"
done
wget ${WEBRESOURCE}/${FILENAME}.sha256 -P ${TMPDIR}/
$? -ne 0 ] && _log "Failed to download ${WEBRESOURCE}/${FILENAME}.sha256" && return 1
SOURCE="$(cat ${TMPDIR}/${FILENAME}.sha256 | cut -f1 -d' ')"
TARGET="$(cat ${TARGETDIR}/${FILENAME}.sha256 | cut -f1 -d' ')"
if ${SOURCE} = ${TARGET} ]; then
rm -f ${TMPDIR}/${FILENAME}*
_log "No changes to ${FILENAME}" && return 0
else
wget ${WEBRESOURCE}/${FILENAME} -P ${TMPDIR}/
mv ${TMPDIR}/${FILENAME}.sha256 ${TARGETDIR}/${FILENAME}.sha256
mv ${TMPDIR}/${FILENAME} ${TARGETDIR}/${FILENAME}
_log "${FILENAME} updated" && return 0
fi
}
_downloadFile $appliance || _log "_downloadFile ended with error."
_downloadFile $iso || _log "_downloadFile ended with error."
_log "End of the script reached successfully." && exit 0