Bez tablic || tablice część trzecia

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