GNU/Linux >> Linux Esercitazione >  >> Linux

Scripting della shell Parte 2:accettazione degli input ed esecuzione dell'aritmetica della shell

Ciao! Questo articolo è la seconda parte della serie di tutorial sugli script di shell Howtoforge. A questo punto, presumo che tu abbia letto la prima parte della serie e sappia come creare un semplice script ed eseguirlo. Nella seconda parte imparerai come accettare gli input dell'utente ed elaborarli tramite script di shell. Iniziamo!

Variabili in Linux

Proprio come i linguaggi di programmazione, la shell Linux ha la capacità di memorizzare i dati in variabili. Una variabile è un contenitore che memorizza temporaneamente i dati che verranno elaborati tramite un linguaggio di programmazione. Esistono due tipi di variabili in Linux:le variabili di ambiente e le variabili di shell.

Variabili d'ambiente

Le variabili di ambiente sono le variabili predefinite in Linux e vengono utilizzate per passare informazioni tra processi nella shell. Le variabili di ambiente fanno distinzione tra maiuscole e minuscole e devono essere sempre in maiuscolo per accedervi.

La tabella seguente mostra le variabili di ambiente comuni nella shell di Linux:

Nome variabile Utilizzo
BASH Contiene il percorso completo dell'interprete dei comandi per gli script Bash
VERSIONE_BASH Contiene la versione bash release della macchina attualmente utilizzata
CASA Contiene il percorso relativo della directory home.
LOGNAME Contiene il nome dell'account dell'utente attualmente connesso
OSTYPE Contiene una stringa che descrive il sistema operativo corrente della macchina utilizzata
PERCORSO Contiene un percorso assoluto separato da due punti dei file eseguibili in Linux
PWD Contiene la directory di lavoro corrente della shell
SHELL Contiene la shell della riga di comando preferita
UTENTE Funziona in modo simile a LOGNAME. Contiene il nome dell'account dell'utente attualmente connesso
_ Contiene il nome del comando utilizzato di recente nella shell

Per visualizzare il valore di una variabile di ambiente, l'utente deve anteporre un simbolo di dollaro ($) alla variabile a cui accedere. Ad esempio, per visualizzare alcune informazioni di sistema come la directory di lavoro corrente, l'utente connesso e il tipo di sistema operativo utilizzando echo utilizziamo:

#!/bin/bash
echo $PWD
echo $LOGNAME
echo $OSTYPE

Il risultato è:

Per ottenere l'intero elenco delle variabili di ambiente in Linux, utilizzare il comando env.

Modifica dei valori delle variabili di ambiente

Per fornire flessibilità al sistema, queste variabili di ambiente possono essere manipolate. Per impostare un valore su una variabile di ambiente, utilizza un'espressione di assegnazione (segno di uguale).

Esempio:

#!/bin/bash
echo $USER
USER="new user"
echo $USER

Il risultato dello script è:

Quando esegui lo script, inizialmente $USER nella riga echo $USER mostra il valore della variabile USER. Utilizzando un operatore di assegnazione (=) la variabile USER cambia il suo valore. Tuttavia, se l'utente assegnerà valori sconosciuti a una variabile di ambiente, la shell creerà un'altra variabile di shell simile alla variabile di ambiente nel contesto locale dello script ma non influirà sul comportamento di altre applicazioni. Ciò significa che, una volta chiuso il nostro script, la variabile USER manterrà il suo valore predefinito.

Si noti che nel nostro esempio precedente, omettiamo il simbolo del dollaro ($) nel nome della variabile quando si manipolano i valori delle variabili di ambiente come la riga USER="new user". Inoltre, quando si utilizza l'operatore di assegnazione, non deve esserci spazio tra il segno USER e =. L'aggiunta di uno spazio tra di loro crea un errore.

Variabili di shell

La shell consente inoltre all'utente di dichiarare variabili. Proprio come PHP, per dichiarare una variabile negli script di shell, l'utente non deve preoccuparsi di dichiararne il tipo di dati; l'interprete rileverà automaticamente il tipo di dati della variabile in base ai dati che l'utente memorizza in essa durante il runtime.

Regole nella denominazione delle variabili shell

Proprio come qualsiasi linguaggio di programmazione, ci sono regole nella denominazione delle variabili della shell. Quanto segue riassume le regole:

  1. I nomi delle variabili devono iniziare con una lettera o un trattino basso.
  2. Deve contenere solo caratteri alfanumeroci o un trattino basso.
  3. Le variabili fanno distinzione tra maiuscole e minuscole, quindi le variabili path, PATH e Path sono diverse.

Per dimostrare questa regola, creeremo un semplice script di seguito:

#!/bin/bash
12abc=10
abc#*=10
_abc=10
_ABC=2
echo $12abc $abc#* $_abc $_ABC

Le righe 2 e 3 restituiscono l'errore "comando non trovato" perché la variabile 12abc inizia con un carattere numerico e la variabile abc#* contiene caratteri non validi. Abbiamo anche dimostrato che _abc e _ABC sono variabili diverse e la riga _ABC=2 non sovrascrive il valore di _abc.

Assegnazione di valori alle variabili shell usando il comando di lettura:

read è un comando che consente di accettare input dall'utente. La sintassi nell'uso del comando di lettura è:

read <variable_name>

Ad esempio, creeremo uno script che consentirà a un utente di inserire il suo nome e cognome e di visualizzarli. Per far sapere all'utente cosa fare, mostriamo un prompt utente con il comando echo.

#!/bin/bash
echo "Your first name: "
read fname
echo "Your last name:"
read lname 
echo "Hello $fname $lname ! I am learning how to create shell scripts."

Il risultato è:

Tieni presente che, come nel nostro esempio precedente, non è necessario dichiarare una variabile per utilizzarla. L'interprete crea anche automaticamente la variabile utilizzata nel comando di lettura. Tuttavia, nell'esempio, abbiamo usato ripetutamente il comando echo per creare un prompt per l'utente. Il comando read ha anche la capacità di creare un prompt mentre accetta gli input dell'utente. La sintassi dell'utilizzo del prompt nel comando di lettura è:

read -p "Your prompt: " <variable_name>

Per semplificare il nostro codice precedente possiamo ricostruire il codice in:

#!/bin/bash
read -p "Your first name: " fname
read -p "Your last name: " lname
echo "Hello $fname $lname ! I am learning how to create shell scripts"

Un altro vantaggio del comando read è che il prompt dei comandi è subito dopo il testo e non nella riga sottostante.

Il comando read può essere utilizzato anche per accettare password. A differenza degli input ordinari, le password sono mascherate per garantire la sicurezza. La sintassi per accettare una password è:

read -s -p "your prompt" <variable_name>

Esecuzione di semplici operazioni aritmetiche utilizzando la shell

Oltre ad accettare input e visualizzare l'output, la shell bash ha anche un'opzione aritmetica incorporata. La tabella seguente riassume gli operatori aritmetici incorporati nella shell Bash.

Operatore Descrizione Sintassi Utilizzo
+ Aggiunta a=$((b+c)) Aggiunge il valore di b e c e lo memorizza nella variabile a
- Sottrazione a=$((b-c)) Sottrae il valore di c da b e lo memorizza nella variabile a
* Moltiplicazione a=$((b*c)) Moltiplica il valore di b e c e lo memorizza nella variabile a
/ Divisione a=$((b/c)) Dividi il valore di b per c e lo memorizza nella variabile a
% Modulo a=$((b%c)) Esegue la divisione modulo di b e c e la memorizza nella variabile a
++ Pre-incremento $((++aa)) Incrementa il valore della variabile a immediatamente
++ Post-incremento $((a++)) Incrementa il valore della variabile a e riflette le modifiche alla riga successiva
-- Pre-decremento $((--a)) Decrementa immediatamente il valore della variabile a
-- Post-decremento $((a--)) Decrementa il valore della variabile a e riflette le modifiche alla riga successiva
** Esponenziale $((a**2)) Alza il valore di a all'esponente di 2
+= Più uguale $((a+=b)) Aggiunge il valore di aeb e lo memorizza nella variabile a
-= Meno uguale $((a-=b)) Sottrae il valore di b da a e lo memorizza nella variabile a
*= Tempi uguali $((a*=b)) Moltiplica il valore di aeb e lo memorizza nella variabile a
/= Barra uguale $((a/=b)) Dividi il valore di a per b e lo memorizza nella variabile a
%= Mod-uguale $((a%=b)) Esegui la divisione modulo tra aeb e la memorizza nella variabile a

Nota che ogni volta che esegui un'istruzione aritmetica, tutte le nostre variabili saranno racchiuse tra un simbolo del dollaro e una doppia parentesi. In questo modo, l'interprete tratta i valori delle nostre variabili come numeri interi. Senza di essa, l'interprete tratta i valori della variabile come una stringa. Per avere un esempio, guarda lo script di seguito:

#!/bin/bash
read -p "Enter int1: " a
read -p "Enter int2: " b
echo $((a+b))
c=$a+$b
echo $c

Quando eseguiamo il nostro esempio, la riga $((a+b)) aggiunge i valori dell'utente che sono memorizzati rispettivamente nelle variabili aeb mentre c=$a+$b tratta le variabili aeb come string.

Conclusione

Abbiamo spiegato come accettare input e memorizzarlo su una variabile e come eseguire operazioni aritmetiche nello scripting della shell bash. Nella parte successiva, presenteremo le strutture di controllo e in particolare la struttura decisionale.

Riferimenti:

Il Progetto Informativo Linux. (2007). Estratto il 29 aprile 2015 da Linfo.org: http://www.linfo.org/

Cooper, M. (nd). Guida avanzata agli script Bash. Estratto il 29 aprile 2015 da http://www.tldp.org/LDP/abs/html/

Variabili ambientali. (n.d.). Estratto il 29 aprile 2015 dalla documentazione di Ubuntu: https://help.ubuntu.com/community/EnvironmentVariables


Linux
  1. Esercitazione sulla programmazione C Linux Parte 11 - Operatori aritmetici, relazionali e logici

  2. Come impostare/creare variabili di ambiente e shell in Linux

  3. Variabili d'ambiente utente con "su" e "sudo" in Linux

  4. Comportamento degli array nello scripting bash e nella shell zsh (Start Index 0 o 1?)

  5. shell diversa per utente root e non root

Shell Scripting Parte I:Introduzione agli script bash

Scripting della shell Parte 2:accettazione degli input ed esecuzione dell'aritmetica della shell

Script di shell Parte 4:Strutture di controllo della ripetizione

Bash Beginner Series #2:Comprensione delle variabili nello scripting di Bash Shell

Shell Scripting Part4 – Input, Output e Reindirizzamento

Bash Scripting:come generare e formattare il testo su Linux Shell