Fedora Online Forum

Il forum della comunità italiana di Fedora

#1 25-07-2018 16:29:24

punico
Pinguino avanzato
Registrato: 07-11-2012
Messaggi: 308

[Risolto] bash script: confronto fra numeri

Ieri pensavo di avere superato per il mio script tutte le difficoltà possibili. Invece non è così.
Oggi sono caduto in una istruzione if di confronto fra due numeri. Il gruppo di istruzioni interessato è

while [ "$striuuid":${ind1}:5!="UUID=" ]; do
		((++ind1))
		echo "ind1= "${ind1}
		{
		if [[ ${ind1} > 25 ]]; then
			read Scelta
		fi
		}		
	done

Devo trovare all'interno della stringa "$striuuid" la frase "UUID=". Per farlo ho pensato di usare il metodo "fai da te" cercando in "$striuuid"  la frase "UUID=", partendo dal 1° carattere di sinistra della stringa e per 5 caratteri, spostando in avanti di 1 carattere l'indice di puntamento iniziale sulla stringa ad ogni ciclo while terminato per "non trovato".
A causa di un loop imprevisto, ho aggiunto, in prova, un'istruzione if con la quale vorrei controllare l'evoluzione del ciclo passo dopo passo a partire dal 26° passaggio. Ebbene non ci riesco perchè l'istruzione if termina con  ${ind1} > 25  già quando ind1 contiene il valore 3

striuuid= |/dev/sdb1: LABEL="fedora28_xfce" UUID="5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1" TYPE="ext4" PARTUUID="000c4a1b-01"|
+ '[' '/dev/sdb1: LABEL="fedora28_xfce" UUID="5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1" TYPE="ext4" PARTUUID="000c4a1b-01":0:5!=UUID=' ']'
+ (( ++ind1 ))
+ echo 'ind1= 1'
ind1= 1
+ [[ 1 > 25 ]]
+ '[' '/dev/sdb1: LABEL="fedora28_xfce" UUID="5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1" TYPE="ext4" PARTUUID="000c4a1b-01":1:5!=UUID=' ']'
+ (( ++ind1 ))
+ echo 'ind1= 2'
ind1= 2
+ [[ 2 > 25 ]]
+ '[' '/dev/sdb1: LABEL="fedora28_xfce" UUID="5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1" TYPE="ext4" PARTUUID="000c4a1b-01":2:5!=UUID=' ']'
+ (( ++ind1 ))
+ echo 'ind1= 3'
ind1= 3
+ [[ 3 > 25 ]]
+ read Scelta

Ho cercato di trovare suggerimenti e soluzioni. Ho anche inserito una

declare	-i ind1=0

nel tentativo di produrre un effetto di confronto di tipo numerico, ma invano. L'istruzione non funziona ed ottengo sempre lo stesso abominevole errore con ind1=3 > 25.
Ma perchè?

Ultima modifica di punico (26-07-2018 14:51:56)


Ciao,
Petrus

Non in linea

#2 25-07-2018 21:28:57

romulus
Pinguino avanzato
Da Roma
Registrato: 25-06-2010
Messaggi: 323

Re: [Risolto] bash script: confronto fra numeri

Credo interpreti il simbolo maggiore come un redirezione (ma non spiega perche le prime tre volte funziona)

così funziona

 if [[ ${ind1} -gt 25 ]]; then

se il tuo scopo è estrarre lo uuid

struuid='|/dev/sdb1: LABEL="fedora28_xfce" UUID="5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1" TYPE="ext4" PARTUUID="000c4a1b-01"|'
# viene eliminato tutto ciò che precede ' UUID=' compreso
uuid=${struuid##* UUID=}    
# viene eliminato tutto ciò che segue dal primo spazio (compreso)
uuid=${uuid%% *}

Assioma di R.: Ci sono più bit in un byte di quanti tu ne riesca a contare.
Avatar by manuoceane from Tux Factory

Non in linea

#3 26-07-2018 14:51:20

punico
Pinguino avanzato
Registrato: 07-11-2012
Messaggi: 308

Re: [Risolto] bash script: confronto fra numeri

Grazie per il prezioso aiuto.
Dopo il tuo esempio ho guardato con più attenzione una fra le tante guide trovate sul web ed ho capito fattivamente quanto già letto sommariamente.
Grazie ancora.
ecco la modifica finale ed il relativo risultato:

	striuuid=(`blkid | grep -i ${Tbsddest[0]}`)          # carica riga contenente il nome logico della partizione interessata
        striuuid=(`ls -l /dev/disk/by-uuid | grep -i ${Tbsddest[0]}`)        
	echo  "striuuid= |"${striuuid}"|"
	striuuid=${striuuid##* UUID=}    		# viene eliminato tutto ciò che precede ' UUID=' compreso   
	echo  "striuuid= |"${striuuid}"|"
	striuuid=${striuuid%% *}   			 # viene eliminato tutto ciò che segue dal primo spazio (compreso)
	echo  "striuuid= |"${striuuid}"|"

contenuto di striuuid dopo l'esecuzione di blkid
striuuid= |/dev/sdb1: LABEL="fedora28_xfce" UUID="5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1" TYPE="ext4" PARTUUID="000c4a1b-01"|

contenuto di striuuid dopo il troncamento della prima parte della variabile fino a UUID= compreso
striuuid= |"5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1" TYPE="ext4" PARTUUID="000c4a1b-01"|

contenuto di striuuid dopo il troncamento della parte finale della variabile fino al 1° spazio compreso, dopo lo UUID
striuuid= |"5b5f6aab-7c8f-4c79-8645-3a2bfcaa87a1"|


Ciao,
Petrus

Non in linea

Piè di pagina