Lavorare con le variabili su Linux

Molti valori importanti sono memorizzati su sistemi Linux in quelle che chiamiamo "variabili", ma in realtà ci sono diversi tipi di variabili e alcuni comandi interessanti che possono aiutarti a lavorare con loro. In un post precedente, abbiamo esaminato le variabili di ambiente e dove sono state definite. In questo post, esamineremo le variabili utilizzate nella riga di comando e negli script.

Variabili utente

Mentre è abbastanza facile impostare una variabile sulla riga di comando, ci sono alcuni trucchi interessanti. Per impostare una variabile, tutto ciò che devi fare è qualcosa del genere:

$ myvar = 11 $ myvar2 = "undici" 

Per visualizzare i valori, devi semplicemente fare questo:

$ echo $ myvar 11 $ echo $ myvar2 undici 

Puoi anche lavorare con le tue variabili. Ad esempio, per incrementare una variabile numerica, è possibile utilizzare uno di questi comandi:

$ myvar = $ ((myvar + 1)) $ echo $ myvar 12 $ ((myvar = myvar + 1)) $ echo $ myvar 13 $ ((myvar + = 1)) $ echo $ myvar 14 $ ((myvar ++)) $ echo $ myvar 15 $ let "myvar = myvar + 1" $ echo $ myvar 16 $ let "myvar + = 1" $ echo $ myvar 17 $ let "myvar ++" $ echo $ myvar 18 

Con alcuni di questi, è possibile aggiungere più di 1 al valore di una variabile. Per esempio:

$ myvar0 = 0 $ ((myvar0 ++)) $ echo $ myvar0 1 $ ((myvar0 + = 10)) $ echo $ myvar0 11 

Con tutte queste opzioni, probabilmente ne troverai almeno una facile da ricordare e comoda da usare.

Puoi anche non settato una variabile - sostanzialmente non la definisce.

$ unset myvar $ echo $ myvar 

Un'altra opzione interessante è che puoi impostare una variabile e crearla sola lettura. In altre parole, una volta impostato in sola lettura, il suo valore non può essere modificato (almeno non senza una procedura guidata da riga di comando molto complicata). Ciò significa che non puoi neanche annullarlo.

$ readonly myvar3 = 1 $ echo $ myvar3 1 $ ((myvar3 ++)) -bash: myvar3: variabile di sola lettura $ unset myvar3 -bash: unset: myvar3: impossibile da annullare: variabile readonly 

È possibile utilizzare una qualsiasi di queste opzioni di impostazione e incremento per assegnare e manipolare le variabili all'interno degli script, ma ci sono anche alcune funzioni molto utili variabili interne per lavorare con gli script. Si noti che non è possibile riassegnare i loro valori o incrementarli.

Variabili interne

Esistono alcune variabili che possono essere utilizzate negli script per valutare gli argomenti e visualizzare informazioni sullo script stesso.

  • $ 1, $ 2, $ 3 ecc. Rappresentano il primo, il secondo, il terzo, ecc. Argomenti dello script.
  • $ # rappresenta il numero di argomenti.
  • $ * rappresenta la stringa di argomenti.
  • $ 0 rappresenta il nome dello script stesso.
  • $? rappresenta il codice di ritorno del comando precedentemente eseguito (0 = successo).
  • $$ mostra l'ID del processo per lo script.
  • $ PPID mostra l'ID del processo per la shell (il processo parent per lo script).

Alcune di queste variabili funzionano anche sulla riga di comando ma mostrano informazioni correlate:

  • $ 0 mostra il nome della shell che stai utilizzando (ad esempio, -bash).
  • $$ mostra l'ID del processo per la tua shell.
  • $ PPID mostra l'ID di processo per il processo parent della shell (per me, questo è sshd).

Se buttiamo tutte queste variabili in uno script solo per vedere i risultati, potremmo farlo:

#! / bin / bash echo $ 0 echo $ 1 echo $ 2 echo $ # echo $ * echo $? echo $$ echo $ PPID 

Quando chiamiamo questo script, vedremo qualcosa del genere:

$ tryme one two three / home / shs / ​​bin / tryme <== script name one <== first argument two <== second argument 3 <== number of arguments one two three <== all arguments 0 <== return code from previous echo command 10410 <== script's process ID 10109 <== parent process's ID 

Se controlliamo l'ID del processo della shell una volta che lo script è terminato, possiamo vedere che corrisponde al PPID visualizzato all'interno dello script:

$ echo $$ 10109 <== shell's process ID 

Naturalmente, è più probabile che utilizziamo queste variabili in modi notevolmente più utili rispetto alla semplice visualizzazione dei loro valori. Diamo un'occhiata ad alcuni modi in cui potremmo farlo.

Verifica per vedere se sono stati forniti argomenti:

se [$ # == 0]; quindi echo "$ 0 nomefile" esci 1 fi 

Verifica per vedere se un particolare processo è in esecuzione:

ps -ef | grep apache2> / dev / null if [$? ! = 0]; quindi echo Apache non esegue exit fi 

Verifica dell'esistenza di un file prima di provare ad accedervi:

if [$ # -lt 2]; quindi echo "Uso: $ 0 righe nomefile" esci 1 fi se [! -f $ 2]; quindi echo "Errore: File $ 2 non trovato" uscita 2 altrimenti head - $ 1 $ 2 fi 

E in questo piccolo script, controlliamo se è stato fornito il numero corretto di argomenti, se il primo argomento è numerico e se il secondo argomento è un file esistente.

#! / bin / bash se [$ # -lt 2]; quindi echo "Uso: $ 0 righe nomefile" esci 1 fi se [[$ 1! = [0-9] *]]; quindi echo "Errore: $ 1 non è un numero" uscire da 2 fi se [! -f $ 2]; then echo "Errore: File $ 2 non trovato" exit 3 altrimenti echo nella parte superiore della testa del file - $ 1 $ 2 fi 

Rinominare le variabili

Quando si scrive uno script complicato, è spesso utile assegnare nomi agli argomenti dello script piuttosto che continuare a fare riferimento a loro come $ 1, $ 2 e così via. Alla 35a riga, qualcuno che legge la tua sceneggiatura potrebbe aver dimenticato cosa rappresenta $ 2. Sarà molto più facile per quella persona se assegni il valore di un parametro importante a $ nomefile o $ numero.

#! / bin / bash se [$ # -lt 2]; quindi echo "Utilizzo: $ 0 righe nomefile" exit 1 else numlines = $ 1 nomefile = $ 2 fi se [[$ numlines! = [0-9] *]]; quindi echo "Errore: $ numlines non è numerico" esci da 2 fi se [! -f $ nomefile]; then echo "Errore: File $ nomefile non trovato" esci 3 altrimenti echo all'inizio della testa del file - $ numlines $ nomefile fi 

Naturalmente, questo script di esempio non fa altro che eseguire il comando head per mostrare le prime X linee in un file, ma ha lo scopo di mostrare come i parametri interni possono essere utilizzati all'interno degli script per aiutare a garantire che lo script funzioni bene o fallisca almeno un po 'di chiarezza.

[Guarda i Suggerimenti Linux di due minuti di Sandra Henry-Stocker per imparare a padroneggiare una serie di comandi Linux] Unisciti alle community di Network World su Facebook e LinkedIn per commentare argomenti che sono importanti.