Una visió de les variables de Linux en el llenguatge de scripting de Shell - Part 9


Ja hem escrit una sèrie d'articles sobre Linux Shell Scripting que va ser ben rebut en aquella època i va ser molt rellevant fins i tot ara. Aquí teniu l'enllaç a la col·lecció d'articles sobre shell scripting.

  1. Aprèn scripts de Linux Shell

Aquí en aquest article veurem les variables, la seva execució i la seva implementació en shell script.

La sortida d'una ordre es pot redirigir a la sortida estàndard o a un fitxer i també es pot emmagatzemar en una variable. Si la sortida d'una ordre és prou gran com per no ajustar-se a la pantalla, només ens queda l'opció de desar la sortida en un fitxer a una variable. Un dels avantatges d'estalviar la sortida a variable és la velocitat d'examen més ràpida. Les variables es guarden a la memòria i, per tant, tendeix a ser ràpida en comparació amb la recuperació d'un fitxer.

Les variables són un component important que s'utilitzen en els scripts de Shell i es declaren mitjançant l'ordre bash \Declare. Per declarar una variable digueu nivell, hem d'executar l'ordre següent.

$ declare LEVEL

Nota: Hem d'utilitzar \typecast, una declaració integrada per a la compatibilitat de l'intèrpret d'ordres korn. El 'declare' és més avançat i conté totes les característiques, per tant es recomana quan utilitzeu BASH.

  1. Un nom de variable ha de justificar l'ús de la variable a l'script.
  2. És molt recomanable utilitzar el mateix nom de variable al llarg del programa.
  3. El nom de les variables pot ser majúscules i minúscules, però per convenció les ordres de l'intèrpret d'ordres estan en minúscules i, per tant, hauríem d'utilitzar el nom de les variables en majúscules, per eliminar qualsevol confusió. p. ex., TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT, etc.

Es pot assignar un valor a una variable mitjançant un signe igual (=). Per assignar una cadena buida a una variable no hem de proporcionar cap valor després del signe igual.

$ LEVEL =

Comproveu el valor emmagatzemat a la variable 'NIVEL' com.

$ printf "%i" $LEVEL

printf, l'ordre que la majoria dels programadors C coneixen, imprimeix dades. %i: representa un nombre enter. Podem substituir-lo per %c per Caràcter o %c per cadena, segons sigui necessari.

$LEVEL: tingueu en compte el $que funciona com a substitut de valor per a la variable NIVEL.

$ printf "%i" $LEVEL
0

Assigna un valor a la variable.

$ LEVEL=0

Comproveu les dades emmagatzemades a la variable.

$ printf "%i" $LEVEL
0

NOTA: És interessant assenyalar que en ambdós casos, quan no hem assignat el valor a la variable i quan hem assignat el valor '0' a la variable 'NIVELL' surt 0. Encara que les sortides són les mateixes en ambdós casos però l'script d'intèrpret d'ordres gestiona tant la declaració de variables de manera diferent.

Assigna un nou valor a la variable.

$ LEVEL=121

Comproveu les dades emmagatzemades a la variable.

$ printf "%i" $LEVEL
121

Declare és una ordre BASH i només crea variable quan s'executa. La variable així creada roman a la memòria fins que s'atura l'script o la variable es destrueix.

$ unset LEVEL

BASH té més de 50 variables predefinides. Algunes d'aquestes variables tenen un significat especial associat a BASH, per exemple, una variable RANDOM produeix un nombre aleatori. Si no es configura i es torna a definir, el valor de la variable original es perd per sempre. Per tant, es recomana no utilitzar cap variable definida pel sistema.

Aquí hi ha una llista d'algunes variables BASH útils.

  1. BASH: la ruta completa de Bash.
  2. BASH_ENV: en un script d'intèrpret d'ordres, el nom del fitxer de perfil executat abans que s'iniciés l'script.
  3. BASH_VERSION: la versió de Bash (per exemple, la versió 2.04.0(1)).
  4. COLUMNES: el nombre de caràcters per línia de la pantalla (per exemple, 80).
  5. HOSTNAME: el nom de l'ordinador. En algunes versions de Linux, aquest pot ser el nom de la màquina. En altres, pot ser un nom de domini totalment qualificat.
  6. HOSTTYPE: tipus d'ordinador.
  7. INICI: el nom del vostre directori d'inici.
  8. OSTTYPE: el nom del sistema operatiu.
  9. PATH: llista de camins de cerca separats per dos punts per trobar una ordre per executar.
  10. PPID: l'ID de procés del procés principal de l'intèrpret d'ordres.
  11. PROMPT_COMMAND: ordre que s'executa abans de la configuració de la cadena de sol·licitud principal de PS1.
  12. PWD: el directori de treball actual (tal com estableix l'ordre cd).
  13. RANDOM: retorna un nombre aleatori entre 0 i 32767 cada vegada que es fa referència.
  14. SHELL: el shell preferit per utilitzar; per als programes que inicien un shell per a vostè.
  15. TERM: el tipus d'emulació de terminal (per exemple, consola).

La regla de la divisió de paraules.

$ LEVEL=0
$ printf "%i" $LEVEL
0

AND

$ LEVEL=”0”
$ printf "%i" $LEVEL
0

En ambdós casos la sortida segueix sent la mateixa. Aleshores, quina diferència hi ha en el resultat quan s'utilitza la cotització?

Comprovem el mateix amb diferents dades variables.

$ LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
$ printf "%i" $LEVEL
0

Per no parlar, la sortida no és correcta. BASH està prenent l'espai després de 0 com a terminació i, per tant, el valor de la variable s'estableix com a 0. Ara intentem utilitzar les cotes per a les variables com a continuació.

$ LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
$ printf "%s" $LEVEL 
0;1;2;3;4;5

Tot i així el resultat no és correcte. BASH va prendre els valors de les variables i va eliminar tots els espais entre ells. Per tant, printf no va interpretar 0,1,2,3,4,5 com a valors diferents. Aleshores, quina és la solució?

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

Sí! Posar la substitució de variables sota cometes és la solució. Les cites agrupen els caràcters en shell i interpreten els caràcters especials d'una manera significativa.

Les cites es poden utilitzar adossades i és una bona idea incloure substitucions de variables amb cometes. A més, es pot utilitzar per separar el text global de les cites. Aquí teniu un exemple.

$ LEVEL=5 
$ FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
$ printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

Separar fragments de text citat amb espai donarà lloc al mateix problema que s'ha comentat anteriorment. El bash tractarà l'espai en blanc com a terminació. Una altra forma de substitució de variables és.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

Les cometes simples restringeixen a BASH la impressió de caràcters especials.

$ printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

La barra invertida funciona com cometes simples per a un personatge. Heu pensat com imprimireu (\)?

$ printf "%c" "\""

Quan %q s'agrupa amb printf, proporciona una barra invertida després de cada paraula per garantir l'espai entre paraules.

$ LEVEL=5

$ FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

$ printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

Això és tot per ara. Sempre intentem oferir als nostres lectors articles que els siguin útils de tant en tant. L'article tractat anteriorment és ampli, per tant, la resta de temes amb exemples es produiran al següent article que inclourà Atributs de la variable, Exportació de variables, etc.

Fins aleshores estigueu atents i connectats a linux-console.net. No us oblideu de proporcionar-nos els vostres valuosos comentaris a la secció de comentaris a continuació.