Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: petrusic - Novembre 22, 2023, 07:36:37 pm

Titolo: [Risolto] Estrarre righe prodotte dal comando lsblk
Inserito da: petrusic - Novembre 22, 2023, 07:36:37 pm
Mi dispiace dover ricorrere ancora al vostro aiuto, ma sono di nuovo bloccato con un mio script.
Ad un certo punto lo script esegue il comando lsblk per estrarre gli UUID di 3 partizioni che contengono nel nome "Etichetta di sistema" le stringhe bkp_giornaliero1, bkp_giornaliero2, bkp_giornaliero3.
Per riconoscerle e caricare le tre righe che le contengono, ho preparato le seguenti istruzioni:
Codice: [Seleziona]
listaUUID=$(lsblk -o NAME,MOUNTPOINT,LABEL,PATH,UUID)
declare -a TbOutput
IFS=$'\n'
TbOutput=(`lsblk -o NAME,MOUNTPOINT,LABEL,PATH,UUID | grep -i "bkp_giornaliero" | tr IFS ' '`)
TotEle=${#TbOutput[*]}
echo "righe lette= ${#TbOutput[*]}"
for ((ii=0;ii\<${TotEle};++ii));do
echo -n "TbOutput[${ii}]="; echo ${TbOutput[ii]}
echo "-------"
echo "Lista UUID = ${listaUUID}"

Ecco che cosa viene fuori:
Codice: [Seleziona]
righe lette= 3
TbOutput[0]=├─sdb1                                    bkp_giornaliero1 /dev/sdb1   381fb2cb-08ba-4f46-978b-bae65df24c90
-------
Lista UUID = NAME   MOUNTPOINT                         LABEL            PATH        UUID
loop0  /snap/bare/5                                        /dev/loop0 
loop1  /snap/chromium/2686                                 /dev/loop1 
loop2  /snap/chromium/2695                                 /dev/loop2 
loop3  /snap/core/16202                                    /dev/loop3 
loop4  /snap/core18/2790                                   /dev/loop4 
loop5  /snap/core18/2796                                   /dev/loop5 
loop6  /snap/core20/2015                                   /dev/loop6 
loop7  /snap/core22/864                                    /dev/loop7 
loop8  /snap/cups/980                                      /dev/loop8 
loop9  /snap/curl/1754                                     /dev/loop9 
loop10 /snap/firefox/3290                                  /dev/loop10
loop11 /snap/firefox/3358                                  /dev/loop11
loop12 /snap/gimp/405                                      /dev/loop12
loop13 /snap/gimp/393                                      /dev/loop13
loop14 /snap/gnome-42-2204/141                             /dev/loop14
loop15 /snap/gnome-3-38-2004/143                           /dev/loop15
loop16 /snap/gtk2-common-themes/13                         /dev/loop16
loop17 /snap/gtk-common-themes/1506                        /dev/loop17
loop18 /snap/gtk-common-themes/1535                        /dev/loop18
loop19 /snap/snap-store/467                                /dev/loop19
loop20 /snap/snap-store/959                                /dev/loop20
loop21 /snap/snapd/20092                                   /dev/loop21
loop22 /snap/snapd/20290                                   /dev/loop22
loop23 /snap/snapd-desktop-integration/83                  /dev/loop23
loop24 /snap/vlc/3721                                      /dev/loop24
sda                                                        /dev/sda   
├─sda1 /boot/efi                                           /dev/sda1   4637-4332
├─sda2 /                                                   /dev/sda2   a34c6b2e-1316-436a-ac11-efbd946196be
├─sda3                                                     /dev/sda3   efa629f6-34dc-4b86-9eb8-1125af45e53e
├─sda4                                                     /dev/sda4   e83830b8-b36b-4fb2-b203-8d5e983713b0
├─sda5                                                     /dev/sda5   72d035fb-482f-458d-a6b6-1576c2efcd50
├─sda6                                                     /dev/sda6   81e5c238-4eb9-4a88-bf24-6f5304bab88d
└─sda7                                                     /dev/sda7   3f45de5a-3c59-4efb-bd4d-4015543d2944
sdb                                                        /dev/sdb   
├─sdb1                                    bkp_giornaliero1 /dev/sdb1   381fb2cb-08ba-4f46-978b-bae65df24c90
├─sdb2                                    bkp_giornaliero2 /dev/sdb2   aa228263-d6d5-49c5-959a-ac0890454db2
├─sdb3 /media/petrus/bkp_giornaliero3     bkp_giornaliero3 /dev/sdb3   485fda6b-a70c-4f2b-bc3b-97f29fddee43
├─sdb4                                                     /dev/sdb4   
├─sdb5                                    bkpUbuntu        /dev/sdb5   0cb8ca1f-c6ff-45ad-8075-c087e51e019f
└─sdb6                                    bkpLinuxMint     /dev/sdb6   9db2ace3-959f-4471-8fb3-38d697f78848
sdc                                                        /dev/sdc   
└─sdc1 /media/dirdati                     archivio dati    /dev/sdc1   80cb4e0e-2ae4-4820-a77c-8709f1078cb7

Ho riportato anche l'output prodotto dal comando lsblk, per completezza di informazioni.

Sicuramente sbaglio od ometto qualcosa, per cui l'array si forma con una sola riga, nonostante che il totale degli elementi caricati, citato con l'istruzione echo, sia 3. Purtroppo non riesco a capire l'errore commesso.
Titolo: Re:Estrarre righe prodotte dal comando lsblk
Inserito da: nomorelogic - Novembre 23, 2023, 11:24:17 am
lo script che hai messo nel post conteneva un paio di errori:

io ho sostituito la stringa di ricerca "bkp_giornaliero" con "SWAP" e da me ora funziona
vedi se è a posto anche per te

Codice: [Seleziona]
listaUUID=$(lsblk -o NAME,MOUNTPOINT,LABEL,PATH,UUID)
declare -a TbOutput
IFS=$'\n'
TbOutput=(`lsblk -o NAME,MOUNTPOINT,LABEL,PATH,UUID | grep -i "SWAP" | tr IFS ' '`)
TotEle=${#TbOutput[*]}
echo "righe lette= ${#TbOutput[*]}"
for ((ii=0;ii<${TotEle};ii++));do
    echo -n "TbOutput[${ii}]="; echo ${TbOutput[ii]}
done
echo "-------"
echo "Lista UUID = ${listaUUID}"


risultato
Codice: [Seleziona]
righe lette= 1
TbOutput[0]=├─nvme0n1p3 [SWAP]            /dev/nvme0n1p3 973d8e24-001c-4c85-ba53-d3f9abee9200
-------
Lista UUID = NAME        MOUNTPOINT  LABEL PATH           UUID
sda                           /dev/sda       
nvme0n1                       /dev/nvme0n1   
├─nvme0n1p1 /boot/efi         /dev/nvme0n1p1 F5B2-6CA9
├─nvme0n1p2 /                 /dev/nvme0n1p2 91f3013c-0b53-46a6-93a6-04bd262d9b4e
├─nvme0n1p3 [SWAP]            /dev/nvme0n1p3 973d8e24-001c-4c85-ba53-d3f9abee9200
├─nvme0n1p4                   /dev/nvme0n1p4 0556b984-afb7-4f92-8398-9a59e37ecde4
└─nvme0n1p5 /media/dati       /dev/nvme0n1p5 614ee29c-5a9d-457d-bb12-7c442f8d2048



Edit:
per quanto riguarda lsblk, prova anche questi parametri
Codice: [Seleziona]
lsblk -lo NAME,MOUNTPOINT,LABEL,PATH,UUID
lsblk -Po NAME,MOUNTPOINT,LABEL,PATH,UUID

il primo (-l) fa una lista più pulita senza caratteri strani (tipici dell'albero)
il primo (-P) fa una lista ma con formato "chiave"="valore"

uno dei 2 potrebbe esserti utile


Titolo: Re:Estrarre righe prodotte dal comando lsblk
Inserito da: petrusic - Novembre 23, 2023, 03:49:48 pm
lo script che hai messo nel post conteneva un paio di errori:
  • il ciclo for non veniva chiuso con "done"
  • nella condizione del for c'era un backslash
E' vero. Il primo errore non l'avevo proprio visto, il secondo è un errore che mi riporto dal passato, ma non l'avevo notato perchè, cercando una sola riga, funzionava comunque.
Grazie.
Citazione da: nomorelogic
per quanto riguarda lsblk, prova anche questi parametri
Codice: [Seleziona]
lsblk -lo NAME,MOUNTPOINT,LABEL,PATH,UUID
lsblk -Po NAME,MOUNTPOINT,LABEL,PATH,UUID

il primo (-l) fa una lista più pulita senza caratteri strani (tipici dell'albero)
il primo (-P) fa una lista ma con formato "chiave"="valore"

uno dei 2 potrebbe esserti utile
Si, bellissimi tutti e due, soprattutto il secondo.
Grazie, applicherò quello che mi risulterà più pratico nel trattare la risposta al comando.

 :)