Ciao a tutti, sto facendo uno script bash su come ottenere informazione specifiche sui moduli del kernel utilizzando il comando lsmod, ma trovo qualche difficoltà nel trovare comandi riguardanti la visualizzazione dello spazio totale occupato dai moduli in uso, e se esiste o meno il modulo relativo al bluetooth. Vi scrivo di seguito la traccia dell'esercizio e lo svolgimento di quello che sono riuscito a fare. Se notate altri errori, o qualche consiglio/suggerimento da dare sono ben lieto di accettarli! Grazie a tutti.

TRACCIA Scrivere uno script in bash che permetta all'utente (utilizzando select) di ottenere informazione specifiche sui moduli del kernel (usando opportunamente lsmod). In particolare:

  1. numero totale di moduli
  2. numero moduli in uso (HINT: valore terza colonna diversa da zero)
  3. spazio totale occupato dai moduli in uso
  4. se esiste o meno il modulo relativo al bluetooth (scritto esattamente così)
  5. tutte le informazioni precedenti
  6. exit

SVOLGIMENTO

#!/bin/bash
OPTIONS="1 2 3 4 5 6"
echo"Inserisci uno dei seguenti numeri:$OPTIONS"
select op in $OPTIONS; do
if["$opt"="1"]; then
caricati=$(cat | wc -l)
echo("Il numero totale di moduli è: $caricati"
elif["$opt"="2"];then
utilizzati=$(cat | grep -v "^0$" | wc -l)
echo "Il numero di moduli in uso è: $utilizzati"
elif["$opt"="3"];then
echo"...."
elif["$opt"="4"];then
echo"...."
elif["$opt"="5"];then
#comandi unificati
echo"...."
elif["$opt"="6"];then
echo"Uscita in corso..."
exit
else
echo"Puoi selezionare solo un numero compreso tra 1 e 6, riprova"
fi
done

Edit

Grazie @enzotib dell'aiuto ma ho ancora un problema, quando vado ad eseguire con il comando bash nomebash.sh mi dà questi due errori: 1) syntax error near unexpected token 'then' 2) 'if["$opt"="1"];then' La versione dello script che sto cercando di eseguire è:

#!/bin/bash
OPTIONS="1 2 3 4 5 6"
echo Inserisci uno dei seguenti numeri:$OPTIONS
select opt in $OPTIONS; do
if["$opt"="1"]; then
echo Il numero totale di moduli è: $ lsmod | awk 'NR>1' | wc -l
elif["$opt"="2"];then
echo Il numero di moduli in uso è: $ lsmod | awk 'NR>1 && $3>0' | wc -l
elif["$opt"="3"];then
echo Lo spazio totale occupato dai moduli in uso è: $ lsmod | awk 'NR>1 { tot += $2 }; END { print tot }'
elif["$opt"="4"];then
echo lsmod | awk | 'NR>1 && $1 =="bluetooth"'
elif["$opt"="5"];then
echo Il numero totale di moduli è: $ lsmod | awk 'NR>1' | wc -l
echo Il numero di moduli in uso è: $ lsmod | awk 'NR>1 && $3>0' | wc -l
echo Lo spazio totale occupato dai moduli in uso è: $ lsmod | awk 'NR>1 { tot += $2 }; END { print tot }'
echo lsmod | awk | 'NR>1 && $1 =="bluetooth"'
elif["$opt"="6"];then
exit
else
echo Puoi selezionare solo un numeo compreso tra 1 e 6, riprova 
fi
done

chiesto 24 Mar '14, 16:10

carlocar's gravatar image

carlocar
45146

modificato 25 Mar '14, 17:41

enzotib's gravatar image

enzotib ♦♦
14.0k112186

ci mancano un bel po' di spazi, hai fatto un copia e incolla sbagliato?

(24 Mar '14, 18:10) enzotib ♦♦ enzotib's gravatar image

@carlocar: non usare le risposte, puoi sempre modificare la domanda.
Già ti avevo detto che ti mancavano un bel po di spazi: prima e dopo '[', prima e dopo ']', prima e dopo '=' (solo quando è dentro le quadre),

(25 Mar '14, 17:43) enzotib ♦♦ enzotib's gravatar image

@enzotib adesso ho aggiustato quello che mi hai detto riguardo gli spazi, ma ancora mi dà errori: 1) unexpected EOF while looking for matching ' " 2) syntax error: unexpected end of file.

(26 Mar '14, 14:25) carlocar carlocar's gravatar image

@carlocar: un errore che ho notato adesso è che per riportare un numero uscito da un comando non devi usare la sintassi:

echo "Il valore è $ comando"

ma piuttosto:

echo "Il valore è $(comando)"

che tra l'altro è equivalente al più antico

echo "Il valore è `comando`"
(26 Mar '14, 16:44) enzotib ♦♦ enzotib's gravatar image
1

Una versione funzionante dello script http://paste.ubuntu.com/7157631/

(26 Mar '14, 17:28) nico nico's gravatar image

@nico: quando vado ad eseguire la tua versione con il comando bash nomebash.sh, mi dà questi due errori:

1) unexpected EOF while looking for matching ' "

2) syntax error: unexpected end of file. Sai dirmi perché?

Grazie in anticipo

(27 Mar '14, 12:39) carlocar carlocar's gravatar image

Perché quando l'ho caricato su pastebin, nel copia e incolla, è successo qualcosa. Adesso l'ho caricato su google drive e la sintassi è rimasta inalterata, scaricalo da qui https://drive.google.com/file/d/0B0bXvXNA9LR-R0hPc2ptV2RlS28/edit?usp=sharing

(27 Mar '14, 13:40) nico nico's gravatar image

@nico: Adesso si, funziona grazie mille!

(27 Mar '14, 13:59) carlocar carlocar's gravatar image

Di niente. Se hai risolto accetta la risposta di enzotib così chiudi la domanda.

(27 Mar '14, 14:15) nico nico's gravatar image

Soluzioni veloci, senza tener conto che quello che fai con wc per contare le righe si potrebbe fare anche direttamente con awk, risparmiando un processo. L'onnipresente NR > 1 serve per escludere dalle elaborazioni la prima riga dell'output di lsmod che è un'intestazione.

  1. numero totale di moduli

    lsmod | awk 'NR > 1' | wc -l
    
  2. numero moduli in uso (HINT: valore terza colonna diversa da zero)

    lsmod | awk 'NR > 1 && $3 > 0' | wc -l
    
  3. spazio totale occupato dai moduli in uso

    lsmod | awk 'NR > 1 { tot += $2 }; END { print tot }'
    
  4. se esiste o meno il modulo relativo al bluetooth (scritto esattamente così)

    lsmod | awk 'NR > 1 && $1 == "bluetooth"'
    
coll. permanente

ha risposto 24 Mar '14, 18:08

enzotib's gravatar image

enzotib ♦♦
14.0k112186

La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×46

domanda posta: 24 Mar '14, 16:10

domanda visualizzata: 1,139 volte

ultimo aggiornamento: 27 Mar '14, 14:15

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.