Fedora Online Forum

Il forum della comunità italiana di Fedora

#1 23-07-2018 10:59:00

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

[Risolto] expr index non mi funziona

Ho dovuto riprendere un mio vecchio script per migliorarlo.
Nel coprpo dello script utilizzo 2 volte il comando "expr index ", la prima volta funziona bene, la seconda volta lo stesso comando non mi dà più il valore che mi aspetto e che dovrebbe essere uguale al primo.
Ho scoperto che la causa del malfunzionamento è un ciclo for sulla stessa stringa al cui interno agisce la 2.a istruzione "expr". Riporto il codice:

 codid=$(ls -l /dev/disk/by-id | grep -i "ata-MAXTOR_STM3160215AS_9RA9A81C")
  IFS=$'\n'   # IFS sta per "separatore di campo interno"
#------------------------------------------------------------------------------------------------ 1.a esecuzione di "expr index"
  pos2=`expr index "$codid" "$IFS"`		# estrazione 1.a posizione del campo RITORNO_A_CAPO internamente alla stringa codid
#------------------------------------------------------------------------------------------------ 
  echo -n "posiz.separatore="; echo "$pos2"

  ind=0
  for IFS in $codid; do
	((ind++))
	echo "n. blocchi di tipo id=$ind"
  done
  lungh=`expr length "$codid"`
  echo "lungh-codid=${lungh}"
  totind=$ind
  echo "totind=$totind"
  ind=0
  pos2=0
  declare -a Tbyid[totind]
  for IFS in $codid; do
	pos1=$((pos2+1))
#------------------------------------------------------------------------------------------------ 2.a esecuzione di "expr index"
	pos2=`expr index "$codid" "$IFS"`		
#------------------------------------------------------------------------------------------------ 
        lungh=$((pos2-pos1+1))
	echo "$codid"	
        echo -n "lungh=${$lungh}"
        echo "pos1=${pos1}"  
        echo -n "posiz.separatore="; echo "$pos2"
	Tbyid[ind]=${codid:pos1:lungh}
	echo "Tbyid[ind]=${Tbyid[ind]}"
	((ind++))
        exit
 done

ecco il risultato

---------------- 1.a esecuzione di expr index ----------------
posiz.separatore=86
n. blocchi di tipo id=1
n. blocchi di tipo id=2
n. blocchi di tipo id=3
n. blocchi di tipo id=4
n. blocchi di tipo id=5
n. blocchi di tipo id=6
lungh-codid=550
totind=6
---------------- 2.a esecuzione di expr index ----------------
lungh=0
pos1=1
posiz.separatore=0
Tbyid[ind]=

Dovrò trovare un altro metodo di ricerca e caricamento dell'array Tbyid.
Peccato, non me l'aspettavo prorpio.

Ultima modifica di punico (23-07-2018 22:07:42)


Ciao,
Petrus

Non in linea

#2 23-07-2018 15:26:36

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

Re: [Risolto] expr index non mi funziona

Ho risolto così

  declare -a Tbyid
#set -x      # Visualizza tutti i comandi prima della loro esecuzione.
  IFS=$'\n'   # IFS sta per "separatore di campo interno"
  Tbyid=(`ls -l /dev/disk/by-id | grep -i "ata-MAXTOR_STM3160215AS_9RA9A81C" | tr IFS ' '`)          # carica tabella coi risultati filtrati del comando
  TotEle=${#Tbyid[*]}
  echo ${#Tbyid[*]}        #  mostra il N° degli elementi di una tabella
  ind=0
  for ((ind=0;ind\<"$TotEle";++ind));do
	echo "Elem.${ind}"; echo ${Tbyid[ind]}    #  mostra il contenuto di ciascun elemento di una tabella
	echo
  done

segue risultato ottenuto

[[email protected] bkp_dati]$ ./bkpgg_tst.sh

SALVATAGGIO GIORNALIERO DATI - ore 16:17
AVVIO salvataggio
6
Elem.0
lrwxrwxrwx. 1 root root  9 23 lug 08.25 ata-MAXTOR_ TM3160215A _9RA9A81C -> ../../sdb

Elem.1
lrwxrwxrwx. 1 root root 10 23 lug 08.25 ata-MAXTOR_ TM3160215A _9RA9A81C-part1 -> ../../sdb1

Elem.2
lrwxrwxrwx. 1 root root 10 23 lug 08.25 ata-MAXTOR_ TM3160215A _9RA9A81C-part2 -> ../../sdb2

Elem.3
lrwxrwxrwx. 1 root root 10 23 lug 08.25 ata-MAXTOR_ TM3160215A _9RA9A81C-part3 -> ../../sdb3

Elem.4
lrwxrwxrwx. 1 root root 10 23 lug 08.25 ata-MAXTOR_ TM3160215A _9RA9A81C-part4 -> ../../sdb4

Elem.5
lrwxrwxrwx. 1 root root 10 23 lug 08.25 ata-MAXTOR_ TM3160215A _9RA9A81C-part5 -> ../../sdb5

[[email protected] bkp_dati]$

Più che soddisfatto !!!


Ciao,
Petrus

Non in linea

#3 23-07-2018 15:28:19

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

Re: [Risolto] expr index non mi funziona

Alla fine ho trovato una soluzione semplicissima, mentre inizialmente avevo pensato ad un metodo logicamente complesso.


Ciao,
Petrus

Non in linea

Piè di pagina