[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] - Semplice script bash



Ciao Alessio,
se me lo permetti faccio alcuni commenti allo script. Così magari ne
nasce una discussione utile per tutti.

Ho aggiunto dei commenti subito prima delle righe alle quali si
applicano.

In genere io utilizzo lo shebang nella forma che inibisce l'invocazione
con altri argomenti interpretabili dalla shell, cioè con il «--» dopo il
comando:

#! /bin/bash --

> #!/bin/bash

queste, che sono costanti, puoi dichiararle tali aggiungendo «readonly»
in modo da non cambiarle, successivamente, per sbaglio:

readonly WORKINGDIR=/tmp

> WORKINGDIR="/tmp/"
> STORICO="/data/medici"
> HOST='xxx.yyy.zzz.ttt'
> USER='utente'
> PASSWD='passsssssssssword'
> 
> #mi sposto nella cartella di lavoro/salvataggio dei file generati
> cd $WORKINGDIR

le righe successive, se non ho capito male cercano di capire se ci sono
dei file che hanno nome che inizia per «048033» e le mettono in un
array. In realtà, sotto, non interessa quali siano i nomi dei file, ma
solo se ne esistano o meno.
Il ciclo dovrebbe popolare una variabile array, ma in realtà mette tutti
i nomi nella posizione 0 dell'array poiché hai utilizzato la variabile
«i» come indice anziché «I».

> declare -a arr
> I=0
> 
> for file in $( ls 048033* ) ; do
>   if [ -s $file ]; then
>      arr[i]=$file
>   fi
>   I=$((I + 1))
> done
> 
> ELEMENTS=${#arr[@]};

Il ciclo superiore non l'avrei fatto e avrei scritto così, ma sono
abbastanza convinto che esistano metodi più veloci:

ELEMENTS=0
[ $(echo 048033*) != '048033*' ] && ELEMENTS=1

Tra l'altr, se non si utilizzano gli array, puoi anche evitare di usare
la bash e usare la dash, che in questo caso potrebbe essere più veloce.

Nella parte sotto, a parte lo «here document» indentato, c'è il problema
della password che è messa in chiaro nello script. Forse sarebbe
possibile sfruttare file di configurazione di ftp, come il .netrc usato
da ncftp, per evitare di inserire qui la password. Invece tu hai
utilizzato il «-n» proprio per disabilitare il login automatico. Come
mai?

> if [ $ELEMENTS -gt 0 ]; then
>     ftp -nv $HOST << CMD_SCRIPT
>     user $USER $PASSWD
>     ascii
>     prompt
>     mput 048033*.txt
>     bye
>     CMD_SCRIPT
> fi

Questo, combinato con il procedente controllo, potrebbe diventare:

if [ $(echo 048033*) != '048033*' ]; then
     ftp -nv $HOST << CMD_SCRIPT
     user $USER $PASSWD
     ascii
     prompt
     mput 048033*.txt
     bye
CMD_SCRIPT
fi

Ciao,
Giuseppe


Reply to: