Tutorial de Bash Scripting per a principiants

Bash Scripting Tutorial



L'idioma d'ordres per defecte de Linux és l'script Bash. Hem d’executar moltes ordres a Linux diàriament per a molts propòsits. Aquestes tasques diàries es poden automatitzar mitjançant un script bash. Qualsevol usuari pot aprendre aquest llenguatge de seqüències de comandaments amb molta facilitat i rapidesa. Si sou nou en programació bash, aquest tutorial és per a vosaltres.

Contingut:

  1. Comentaris
  2. eco Comandament
  3. variables
  4. Enunciat condicional
  5. Bucles
  6. Funcions
  7. Crida de programes en un script
  8. Creació de menús
  9. Processament de la línia d’ordres
  10. Aritmètica
  11. Manipulació de cordes
  12. Retornant codis de retorn d'un script i capturant-ne un altre
  13. Lectura i escriptura de fitxers
  14. Tubs

Comentaris

Afegir comentaris amb el codi és una part essencial de qualsevol llenguatge de programació. Els comentaris no s'analitzen amb l'script en el moment de l'execució. El lector pot entendre qualsevol codi correctament si el codi és ben comentat. Podeu afegir un comentari de diverses maneres en script bash. En aquesta part es mostra com podeu afegir comentaris d'una sola línia i de diverses línies en un script bash. Creeu un fitxer bash amb el següent script per conèixer l'ús del comentari bash. Aquí, s’utilitza el símbol ‘#’ per afegir un comentari d’una sola línia i s’utilitza cometes simples (‘) amb‘: ’per afegir comentaris de diverses línies.







bash_comment.sh



#! / bin / bash
#Prengueu un número com a entrada
trobo 'Introduïu un número'
llegira
:'
Comproveu que el número d’entrada sigui
inferior a 10 o superior a 10 o igual a 10
'

si [[ $ a -lt 10 ]]
llavors
trobo 'El nombre és inferior a 10'
elif [[ $ a -gt 10 ]]
llavors
trobo 'El nombre és superior a 10'
en cas contrari
trobo 'El nombre és igual a 10'
ser

Sortida:



Executeu l'script.





$bashbash_comment.sh

Aquí, l'script s'executa tres vegades amb el valor d'entrada 3, 10 i 90. Apareixerà la següent sortida.



Si voleu saber més sobre els comentaris bash, podeu comprovar-ho aquest tutorial .

Ves a dalt

ordre eco

L'ordre 'echo' s'utilitza a bash per imprimir la sortida al terminal. Es poden utilitzar diverses opcions amb l'ordre echo en bash per imprimir la sortida de diferents maneres. Creeu un fitxer bash amb el següent script per conèixer els dos usos simples de l'ordre `echo`. Aquí, la primera ordre 'echo' imprimirà dades de text senzilles amb una nova línia i la segona ordre echo imprimirà un text senzill sense línia nova.

echo_test.sh

#! / bin / bash
#Imprimeix el primer text
trobo 'Imprimiu text amb una nova línia'
#Imprimeix el segon text
trobo -n 'Imprimiu text sense cap línia nova'

Sortida:

Executeu l'script.

$bashecho_test.sh

La següent sortida apareixerà després d'executar l'ordre anterior.

Hi ha molts altres usos de l'ordre `echo` a bash. Podeu consultar aquest tutorial per obtenir més informació sobre l'ordre `echo`.

Ves a dalt

variables

La declaració de variables és una part necessària de qualsevol llenguatge de programació. Les variables Bash es poden declarar de diferents maneres. Quan s’assigna un valor a una variable, no s’utilitza cap símbol al principi de la variable. El símbol '$' s'utilitza amb el nom de la variable en el moment de llegir el valor de la variable. La variable es pot utilitzar des del terminal o es pot utilitzar en qualsevol script bash.

Les ordres següents declararan una variable de cadena anomenada mystr amb un valor particular i, a continuació, imprimiu el valor de la variable al terminal.

$mystr='M'agrada la programació bash'
$trobo $ mystr

Sortida:

Creeu un fitxer bash amb el següent script. Aquí es declaren dues variables. Aquests són $ a i $ b . Si el valor d'entrada que s'emmagatzema a $ a és igual a $ b després el missatge, Els números són iguals s'imprimirà d'una altra manera Els números no són iguals s’imprimirà.

var.sh

#! / bin / bash
trobo 'Introduïu un número'
llegira
b=100
si [[ $ a -eq $ b ]]
llavors
trobo 'Els números són iguals'
en cas contrari
trobo 'Els números no són iguals'
ser

Sortida:

Executeu l'script.

$bashvar.sh

L'ordre anterior s'executa dues vegades amb el valor 56 i 100. Apareixerà la següent sortida.

Si voleu saber més sobre les variables bash, podeu comprovar-ho aquest tutorial .

Ves a dalt

Enunciat condicional

Com un altre llenguatge de programació, podeu utilitzar sentències condicionals a bash. ' Si-llavors-altre 'I' Caixa Les sentències s’utilitzen principalment per implementar sentències de condició en qualsevol llenguatge de programació. L'ús de la declaració condicional mitjançant l'ús de 'si' declaració es mostra en aquesta secció d'aquest tutorial. Creeu un fitxer bash amb el següent script on s'utilitza la sentència condicional. Aquí es prendran dos valors de l'usuari com a entrada i s'emmagatzemen a les variables, $ codi , i $ edat . L’instrucció ‘if’ s’utilitza per comprovar el valor de $ edat és superior o igual a 18 i el valor del fitxer $ codi és 1100 . Si ambdues condicions són certes, el missatge, Podeu veure la pel·lícula s'imprimirà d'una altra manera No és apte per veure la pel·lícula s’imprimirà.

cond.sh

#! / bin / bash

trobo 'Introdueix el teu codi'
llegircodi
trobo 'Introduïu la vostra edat'
llegiredat

si [[ $ edat -dóna 18 && $ codi -eq '1100' ]]
llavors
trobo 'Podeu veure la pel·lícula'
en cas contrari
trobo 'No teniu dret a veure la pel·lícula'
ser

Sortida:

Executeu l'script.

$bashcond.sh

La següent sortida apareixerà després de prendre diferents valors d'entrada. 1100 es dóna com a codi i 5 es dóna com a edat per a la primera execució i si la condició torna falsa per a aquests valors. 1100 es dóna com a codi i 45 es dóna com a edat per a la segona execució que retorna cert per a la condició if.

Si voleu obtenir més informació sobre la declaració condicional bash, podeu consultar aquest tutorial.

Ves a dalt

Bucles

Quan algunes parts de l'script necessiten executar-se diverses vegades, s'utilitza el bucle per fer la tasca. Bash admet tres tipus de declaracions de bucles com altres idiomes. Aquests són per a bucles, mentre i fins que. Basant-se en els requisits de programació, s’utilitza un bucle particular al script. Els usos d’aquests tres tipus de bucles es mostren en aquesta secció mitjançant exemples senzills.

Utilitzant el bucle

Creeu un fitxer bash amb el següent script on ` per a bucle s'utilitza per a la iteració. 'per a' loop s'utilitza principalment per iterar una llista de dades o una matriu. Aquí s’utilitza una llista del nom dels dies feiners i s’ itera el nom de cada dia feiner mitjançant el bucle for. `si` La declaració s'utilitza per imprimir un missatge concret basat en el nom del dia de la setmana.

for.sh

#Llegiu un nom entre setmana a cada iteració del bucle
perdiadinsdilluns dimarts dimecres dijous divendres dissabte diumenge
fer

#Comproveu que el nom del dia de la setmana és dilluns o dijous
si [[ $ dia=='Dilluns' || $ dia=='Dijous' ]]
llavors
trobo 'Reunió el$ diaa les 9:30 h

#Comproveu que el nom del dia de la setmana sigui dimarts o dimecres o divendres
elif [[ $ dia=='Dimarts' || $ dia=='Dimecres' || $ dia=='Divendres' ]]
llavors
trobo 'Entrenament a$ diaa les 11:00 del matí
en cas contrari

#Imprimiu 'Vacances' per a altres dies
trobo '$ diaés vacances '
ser
fet

Sortida:

Executeu l'script.

$bashfor.sh

La següent sortida apareixerà després d'executar l'script.

Si voleu saber més informació sobre bash for loop, podeu consultar aquest tutorial.

Utilitzant el bucle while

Creeu un fitxer bash amb el següent script on ` mentre que ` bucle s'utilitza per a la iteració. Aquest script imprimirà els números de l'1 al 20 que són parells i divisibles per 5. Aquí, $ comptador La variable s'utilitza per controlar la iteració del bucle i el valor d'aquesta variable s'incrementa 1 en cada iteració. Quan `si` condició tornarà vertader llavors s'imprimirà el valor de $ comptador .

#! / bin / bash

#Imprimiu el missatge
trobo 'Imprimiu els números parells i divisibles per 5'

# Inicialitzar el comptador
comptador=1

#Iterem el bucle fins que el valor del comptador $ sigui inferior o igual a 20
mentre [ $ comptador -la 20 ]
fer

#Comproveu que el comptador $ sigui divisible per 2 i 5
si [[ $ comptador%2-eq 0 && $ comptador%5-eq 0 ]]
llavors
#Print $ comptador sense línia nova
trobo '$ comptador'
ser

#Increment $ comptador per 1
((comptador ++))
fet
trobo 'Fet'

Sortida:

$bashwhile.sh

Només hi ha números d'entre 1-20 i són parells i divisibles per 5. La següent sortida apareixerà després d'executar l'script.

Si voleu saber més usats de bash ` mentre que bucle, llavors podeu comprovar aquest tutorial .

Utilitzant loop fins

Creeu un fitxer bash amb el següent script on ` fins` bucle s'utilitza per a la iteració. Aquest script imprimirà tots els números senars del 0 al 20. $ n La variable s'utilitza en aquest script per iterar el bucle.

until.sh

#! / bin / bash

# Inicialitzar la variable, n
n=20

# Repetiu el bucle fins que el valor de $ n sigui superior a 0
fins [ $ n -lt 0 ]
fer

#Comproveu que el valor de n és senar
si [[ $ n%2-gt 0 ]]
llavors
trobo $ n
ser

# Incrementar el valor de n per 1
((n=$ n-1))
fet

Sortida:

Executeu l'script.

$bashuntil.sh

El script imprimirà tots els números parells del 20 al 1. La següent sortida apareixerà després d'executar el script.

Ves a dalt

Funcions

Quan un bloc de codi ha d'executar-se diverses vegades en un script, la funció s'utilitza per fer la tasca. Haureu de trucar a la funció per nom només quan l'script definit a la funció s'hagi d'executar moltes vegades en lloc d'afegir el mateix script diverses vegades. El primer parèntesi inicial i final s’utilitza amb el nom de la funció per declarar la funció en un script bash. La funció es pot anomenar només amb el nom de la funció a bash. Bash no admet arguments de funcions com un altre llenguatge de programació estàndard. Però el valor es pot passar a la funció bash d'una manera diferent que es mostra en aquesta secció. El valor es pot retornar des de la funció amb la sentència return o sense fer servir la sentència return.

Creeu un fitxer bash amb el següent script per saber com es poden declarar i cridar les funcions en script bash. Es declaren tres funcions a l'script. Es declara la primera funció per imprimir un missatge senzill, Programació Bash per a principiants . La segona funció es declara per assignar un valor de cadena a una variable, $ retorn_str que s'imprimirà, Apreneu la programació bash amb LinuxHint després de trucar a la funció. Es declara que la tercera funció llegeix un valor d'argument com a radi de cercle que es proporcionarà en el moment de trucar a la funció. Aquí, local s’utilitza per llegir el valor de l’argument. Aquesta funció calcularà l'àrea del cercle en funció del valor del radi mitjançant la fórmula, πr2 i imprimiu el valor de l'àrea calculada.

func.sh

#! / bin / bash

# Declareu una funció senzilla
funciómissatge_impressió()
{
trobo 'Programació basc per a principiants'
}

#Declareu una funció per retornar un valor de cadena
funcióret_strdata()
{
# Inicialitzar la variable amb un valor de cadena
retorn_str='Apreneu la programació bash amb LinuxHint'
}

#Declareu una funció per llegir el valor de l'argument
funciócalcular_àrea()

#Llegiu el valor de l'argument passat
local radi=$ 1
àrea= $(trobo $ radi*$ radi*3.14

#Trucada a la funció per imprimir un missatge senzill
missatge_impressió

#Trucada a la funció que assignarà un valor de cadena en una variable
ret_strdata

#Imprimiu el valor de la variable
trobo $ retorn_str

#Llegiu el valor del radi
trobo 'Introduïu el valor del radi'
llegirtreballar

#Trucada a la funció amb un valor de radi
calcular_àrea$ rad

Sortida:

Executeu l'script.

$bashfunc.sh

La següent sortida apareixerà després d'executar l'script. Les dues primeres línies s’imprimiran trucant a les funcions, print_message () i ret_strdata () . La darrera línia s'imprimirà trucant a la funció, calcular_àrea () amb el valor del radi d'entrada pres.

Si voleu saber sobre la devolució d'una cadena de la funció bash, podeu fer-ho aquesta tutoria el.

Ves a dalt

Crida de programes en un script

Podeu utilitzar molts tipus d’ordres per trucar a altres programes en qualsevol script bash, com ara font, bash, eval, exec , etc. Suposem tres fitxers bash, add.sh , subtract.sh, multiplicar.sh i divisió.sh creat per realitzar sumes, restes, multiplicacions i divisions. Aquí, subtract.sh i division.sh llegiu els arguments de la línia d’ordres. A continuació es mostra el guió de tots aquests quatre fitxers.

add.sh

#! / bin / bash
a=60
b=40
((resultat=$ a+$ b))
trobo 'L'addició de$ a+$ b=$ resultat'

subract.sh

#! / bin / bash
a=$ 1
b=$ 2
((resultat=$ a-$ b))
trobo 'La resta de$ a-$ b=$ resultat'

multiply.sh

#! / bin / bash
((resultat=$ 1*$ 2))
trobo 'La multiplicació de $ 1 i $ 2 és$ resultat'

divide.sh

#! / bin / bash
a=$ 1
b=2
((resultat=$ a/$ b))
trobo 'La divisió de$ aper$ bés$ resultat'

Creeu un fitxer bash anomenat, callpro.sh amb el següent script per trucar als fitxers bash esmentats mitjançant ordres source, bash, eval i exec. Heu d’establir el permís d’execució dels quatre fitxers anteriors abans d’executar el següent script. L'ordre `source` s'utilitza per trucar add.sh dossier. L'ordre 'bash' s'utilitza per executar el fitxer subtract.sh. L'ordre `eval` s'utilitza per executar el fitxer multiply.sh. S'envien dos valors d'entrada com a arguments de línia d'ordres per a l'ordre `eval`. L'última ordre és l'ordre exec que només funciona amb ruta absoluta. Per a això, el nom del camí d'accés complet del fitxer divide.sh es dóna a l'script.

callpro.sh

#! / bin / bash
script1='Add.sh'
script2='Subtract.sh'
script3='Multiply.sh'
script4='/Home/fahmida/code/divide.sh'

font '$ script1'

bash $ script2 50 20

trobo 'Introduïu el valor d'un'
llegira
trobo 'Introduïu el valor de b'
llegirb
eval bash $ script3 $ a $ b
exec $ script4 30

Sortida:

Executeu l'script.

$bashcallpro.sh

La següent sortida apareixerà després d'executar l'script.

Ves a dalt

Creació de menús

Hi ha una ordre útil a bash per crear un menú senzill que es diu `select` comandament. Mitjançant aquesta ordre es poden crear diferents tipus de menús. Aquesta ordre utilitza una llista de dades particular per crear un menú. Creeu un fitxer bash amb el codi següent per veure l'ús de `select` per crear un menú. En aquest exemple, la llista de cinc elements s'imprimirà com a menú i demanarà a l'usuari que triï qualsevol idioma de la llista. El valor seleccionat s’emmagatzemarà a la variable, $ idioma que s'imprimeix més endavant concatenant-se amb una altra cadena. El guió sol·licitarà contínuament la selecció de l’idioma fins que l’usuari premi 6 per finalitzar des de l'script.

menu.sh

#! / bin / bash

#Imprimeix el missatge per a l'usuari
trobo 'Seleccioneu el vostre idioma preferit'

# Definiu la llista d'un element de menú
seleccioneullenguatgedinsC# Java PHP Python Bash Exit
fer
#Imprimiu el valor seleccionat
si [[ $ idioma=='Surt' ]]
llavors
sortir 0
en cas contrari
trobo 'L'idioma seleccionat és$ idioma'
ser
fet

Sortida:

Executeu l'script.

$bashmenu.sh

Segons el resultat següent, l'usuari va prémer 3 per primera vegada que imprimia PHP i va prémer 6 per segona vegada que va finalitzar des de l'script.

Si voleu obtenir més informació sobre la creació del menú bash amb `select`, podeu visitar aquest tutorial.

Ves a dalt

Processament de la línia d’ordres

De vegades, hem d’aportar valors d’entrada quan executem l’escript des de la línia d’ordres. Aquesta tasca es pot fer de dues maneres en bash. Una manera és mitjançant l'ús de variables d'argument i una altra manera és mitjançant la funció getopts. En aquesta secció es mostra la lectura de dades d’entrada de línia d’ordres des del terminal mitjançant la variable d’argument.

Creeu un fitxer bash amb el següent script per veure l'ús de la lectura del valor de l'argument de línia d'ordres. Aquest script llegirà tres arguments de línia d'ordres que s'emmagatzemaran a les variables, $ operand1, $ operand2 i $ operator. Per executar l'script correctament, el primer i el tercer valor d'argument han de ser el nombre i el segon valor d'argument ha de ser qualsevol dels quatre operadors aritmètics ('+', '-', '/', 'x'). si La declaració comprovarà el valor de $ operator i farà l'operació basant-se en l'operador i n'imprimirà el valor.

cl1.sh

#! / bin / bash

#Imprimiu les variables d'argument
trobo 'Els valors dels arguments són: $ 1 $ 2 $ 3 $'

# Emmagatzema els valors dels arguments
operand1=$ 1
operand2=$ 3
operador=$ 2

#Comproveu el valor de l'argument de la segona ordre per fer l'operació aritmètica
si [[ $ operador=='+' ]]
llavors
((resultat=$ operand1+$ operand2))
elif [[ $ operador=='-' ]]
llavors
((resultat=$ operand1-$ operand2))
elif [[ $ operador=='X' ]]
llavors
((resultat=$ operand1*$ operand2))
elif [[ $ operador=='/' ]]
llavors

((resultat=$ operand1/$ operand2))
ser

# imprimeix el resultat
trobo -I 'El resultat és =$ resultat'

Sortida:

Executeu l'script.

$bashcl1.sh

L'escriptura s'executa quatre vegades per a quatre tipus d'operadors aritmètics. La següent sortida apareixerà per als valors de l’argument, 6 + 3, 6 - 3, 6 x 3 i 6/3 .

Els valors dels arguments es poden passar amb el parell nom-valor a bash. Creeu un fitxer bash amb el següent script per mostrar com llegir els valors dels arguments amb el nom. El script llegirà dues variables d'argument. Els valors dels arguments amb el nom s’imprimeixen a la primera sentència de l’escriptura. A continuació, s'utilitza un bucle for per iterar la matriu que conté valors d'argument de línia d'ordres. Cada element de la matriu es separa en un parell clau-valor mitjançant l'ordre `talla`. A continuació, s’utilitza la sentència case per imprimir un missatge concret basat en el valor de la clau.

cl2.sh

. #! /sóc/bash

#Imprimiu les variables d'argument
trobo 'Els valors de l'argument són: $ 1 $ 2'

#Llegiu cada argument per separat mitjançant el bucle for
perenfadatdins '[email protected]'
fer

#Nom i valor de l'argument separat
clau= $(trobo $ arg | tallar -f1 -d=)
valor= $(trobo $ arg | tallar -f2 -d=)

#Imprimeix el missatge basat en el nom de l'argument
Caixa $ clau dins
nom) trobo 'Nom de l'estudiant =valor $';;
senyal) trobo 'Marca obtinguda =valor $' ;;
*)
esac
fet

Sortida:

Executeu l'script amb els següents arguments de línia d'ordres.

$bashcl2.shnom= Abir Hossainsenyal=90

A les ordres anteriors es proporcionen dos arguments de línia d'ordres. Aquests són nom = Abir Hossain i marca = 90 . nom i marques estan separats per l'script i s'imprimeixen dos valors després de formatar la sortida.

Processant arguments de línia d'ordres mitjançant getopts la funció no es discuteix en aquest tutorial. Si voleu saber sobre el processament de la línia d’ordres mitjançant getopts funció que podeu visitar aquest tutorial .

Ves a dalt

Aritmètica

Fer un funcionament aritmètic és un requisit habitual de qualsevol llenguatge de programació. Bash fa l'operació aritmètica d'una manera diferent a un altre llenguatge de programació estàndard. Hi ha diverses maneres de fer operacions aritmètiques a bash. En aquesta secció es mostra una de les maneres senzilles de fer l’operació aritmètica. Creeu un fitxer bash amb el següent script. En aquest script es mostren quatre tipus d’operacions aritmètiques. Es mostren una simple operació de suma i divisió mitjançant l'ús de primers claudàtors dobles al començament de l'script. A continuació, es mostra l'operació de preincrement. Finalment, la manera d'utilitzar l'operador de taquigrafia es mostra a l'última part de l'script.

arith.sh

#! / bin / bash
# Calculeu la suma
resultat= $((50+25))
# Imprimeix el valor de suma
trobo 'suma =$ resultat'

# Calculeu la divisió
resultat= $((50/25))
# Imprimeix el valor de la divisió
trobo 'divisió =$ resultat'

# Assigneu un valor a N
N=10
# Fent preincrement
((--N))
# Imprimiu el valor de N
trobo 'Valor després de la disminució =$ N'

# Utilitzant un operador de taquigrafia
((N + =10 ))
# Imprimiu el valor de N
trobo 'Valor després d'afegir 10 =$ N'

Sortida:

Executeu l'script.

$basharith.sh

La següent sortida apareixerà després d'executar l'script.

Totes les operacions aritmètiques es fan mitjançant dobles claudàtors en aquest script anterior. Però podeu utilitzar ‘ deixar ',' expr 'I' bc ‘Ordre per fer l’operació aritmètica a bash. Si voleu saber més sobre aquestes ordres per fer operacions aritmètiques bash, visiteu aquest tutorial.

Ves a dalt

Manipulació de cadenes

Es poden fer molts tipus de tasques amb les dades de cadena a bash. Alguns concatenen cadenes, comparen cadenes, divideixen cadenes, canvien de majúscules i minúscules, etc. No hi ha funcions de cadena integrades com altres idiomes estàndard a bash per fer les operacions de cadena. Algunes manipulacions de cadenes habituals es discuteixen en aquesta secció d’aquest tutorial.

Concatenació de la cadena

Afegir dues o més cadenes juntes s’anomena concatenació de cadenes. La corda s’uneix en bash col·locant-se una darrere l’altra. Creeu un fitxer bash amb el següent script per mostrar l'ús de la concatenació de cadenes. S’inicialitzen dues variables de cadena i s’imprimeixen després de combinar-les. Aquí, el contingut de $ string1 i $ string2 es fusionaran i s’imprimiran.

concat.sh

#! / bin / bash

# Inicialitzar la primera variable de cadena
cadena1='M'agrada '
# Inicialitza la segona variable de cadena
cadena2='Programació Bash'
#Imprimeix després de combinar les dues cadenes
trobo '$ string1$ string2'

Sortida:

Executeu l'script.

$bashconcat.sh

La següent sortida apareixerà després d'executar l'script.

Podeu obtenir més informació sobre la concatenació de cadenes des d’aquest tutorial.

Ves a dalt

Comparant la cadena

Bash utilitza diferents tipus d'operadors per comparar dades de cadenes. Creeu un fitxer bash amb el següent script per mostrar com es comparen dues dades de cadenes. Es pren un valor de cadena com a entrada a l'script que es compara amb una altra cadena. Si el valor coincideix amb un missatge, T'agrada Python s'imprimirà d'una altra manera T’agrada el PERL s’imprimirà.

compare.sh

#! / bin / bash
troboIntroduïu qualsevol valor de cadena
llegirtext

#Comproveu que les dades d'entrada són equivalents a Python
si [ $ text=='Python' ];llavors
trobo 'T'agrada Python'.
en cas contrari
trobo 'T'agrada PERL'
ser

Sortida:

Executeu l'script.

$bashcompare.sh

La sortida següent apareixerà després d'executar l'script, on el valor d'entrada és 'PERL'.

Podeu obtenir més informació sobre la comparació de cadenes a aquest tutorial .

Corda de divisió

Bash no té cap funció de divisió integrada per dividir les dades de cadenes. Les dades de la cadena es poden dividir de diverses maneres en bash en funció de diferents tipus de delimitadors. Creeu un fitxer bash amb el següent script per mostrar com es poden dividir les dades de cadenes en bash. Es pren un valor de cadena com a entrada. Aquest script dividirà el valor de $ text basat en l’espai. Aquí, el IFS La variable s'utilitza per establir el delimitador. 'llegir' aquí s’utilitza l’ordre per dividir el valor del text i emmagatzemar-los en una matriu. per loop s’utilitza per iterar la matriu i imprimir el valor de cada element.

split.sh

#! / bin / bash
# Introduïu un valor de cadena
troboIntroduïu un valor de cadena
llegirtext
# Estableix el delimitador
IFS=''
#Dividiu el valor de $ text en una matriu basada en el delimitador d'espai
llegir -aarr<<< '$ text'
# Imprimiu cada valor de la matriu
pervalordins '$ {arr [@]}';
fer
printf 'valor $ n'
fet

Sortida:

Executeu l'script.

$bashsplit.sh

La següent sortida apareixerà després de prendre l'entrada, Apreneu la programació de Bash . Aquest valor d'entrada és un text de tres paraules. Per tant, la corda es divideix en tres parts.

Podeu obtenir més informació sobre la comparació de cadenes a aquest tutorial .

Canvi de majúscules i minúscules de la cadena

La majoria dels llenguatges de seqüència de comandaments tenen funcions integrades per canviar el cas de les dades de la cadena. Però es pot canviar el cas de les dades de la cadena en bash utilitzant 'tr' per ordre o mitjançant ': Superior' i ':més baix' paraules clau. Creeu un fitxer bash amb el següent script per conèixer les maneres de canviar majúscules i minúscules. Aquí es converteixen les primeres dades de cadenes en majúscules mitjançant '^^' i la segona cadena es converteix en minúscula mitjançant l’ús de 'tr' comandament. 'tr' L'ordre cercarà totes les lletres majúscules de la cadena i convertirà els caràcters en minúscules.

case.sh

#! / bin / bash

#Inicialitzeu les dades de la primera cadena
text1='[email protected]'

#Imprimiu el valor de $ text1 convertint tots els caràcters en majúscules
trobo $ {email ^^}

# Inicialitzar les dades de la segona cadena
text2= 'Conceptes bàsics de programació de Bash'

#Imprimiu el valor de $ text2 convertint tots els majúscules a minúscules
trobo $ text2 | NS [: superior:] [:més baix:]

Sortida:

Executeu l'script.

$bashcase.sh

La següent sortida apareixerà després d'executar l'script.

Podeu obtenir més informació sobre la comparació de cadenes a aquest tutorial .

Ves a dalt

Lectura de dades de cadenes a través del bucle

Les dades de la cadena funcionen com una matriu de caràcters per a qualsevol llenguatge de programació. Com ‘ per 'Bucle es pot utilitzar per llegir les dades de cadena en bash es mostra en aquesta secció. Creeu un fitxer base amb el següent script per llegir cada part del valor de la cadena mitjançant el bucle for.

readstr.sh

#! / bin / bas
# Llegiu cada paraula d'un text fent servir el bucle
pervalordinsProgramació de Bashperels principiants
fer
trobo valor $
fet

Sortida:

Executeu l'script.

$bashreadstr.sh

La següent sortida apareixerà després d'executar l'script.

Podeu obtenir més informació sobre la iteració de dades de cadenes mitjançant el bucle de aquest tutorial .

Ves a dalt

Retornant codis de retorn d'un script i capturant-ne un altre

Un script bash pot capturar codis de retorn d'un altre script trucant-lo i utilitzant-lo '$?' per llegir el valor de retorn. Suposem, un fitxer bash anomenat first.sh retorna un codi després de l'execució. Creeu un altre fitxer bash anomenat second.sh i afegiu el següent script per obtenir el valor retornat i fer algunes altres tasques. A continuació es mostra el codi d’ambdós fitxers. first.sh es cridarà des de second.sh al principi del script. first.sh retornarà un codi de sortida basat en el valor d'entrada. second.sh capturarà el codi per '$?' i compareu amb 1. Si els dos valors són iguals, s'imprimirà, El nombre d'entrada és superior a 100 , en cas contrari, s'imprimirà, El número d’entrada és inferior o igual a 100 .

first.sh

#! / bin / bash

trobo 'Introduïu un valor numèric'
llegirn

# Comproveu que el valor d'entrada sigui inferior o igual a 100 o no
si [[ $ n -la 100 ]]
llavors
sortir 0
en cas contrari
sortir 1
ser

second.sh

#! / bin / bash

#Executeu el fitxer, first.sh
bash 'First.sh'

#Comproveu que el codi de devolució sigui igual a 1 o no
si [ $? -eq 1 ]
llavors
trobo 'El número d'entrada és superior a 100'
en cas contrari
trobo 'El número d'entrada és inferior o igual a 100'
ser

Sortida:

Executeu l'script.

$bashsecond.sh

La següent sortida apareixerà quan l'execució de l'script sigui 55 i 110 dues vegades.

Ves a dalt

Lectura i escriptura de fitxers

La lectura i escriptura de fitxers són requisits habituals de la programació bash. Bash no té cap funció integrada com un altre idioma per llegir o escriure el fitxer. Hi ha diverses maneres de llegir el fitxer en bash. La forma més comuna de llegir o escriure un fitxer en bash és utilitzar 'gat' comandament. Però aquesta ordre s’utilitza per llegir tot el contingut del fitxer alhora. També podeu llegir qualsevol fitxer línia per línia mitjançant qualsevol bucle i 'llegir' comandament. Mitjançant l’operador de redirecció, '>' , podeu escriure dades a qualsevol fitxer de bash. Si voleu afegir dades a qualsevol fitxer, haureu d'utilitzar-les '>>' operador. Tant les operacions de lectura com d’escriptura de fitxers es mostren a la següent part d’aquesta secció.

Lectura del fitxer en bash

Creeu un fitxer bash amb el següent script per llegir un fitxer existent anomenat ' hardware.txt ’. A continuació es mostra el contingut d’aquest fitxer. A l'script, es llegeix tot el contingut del fitxer 'gat' primer i següent, mentre que bucle s’utilitza per llegir el fitxer línia per línia.

hardware.txt

Monitor
Teclat
Ratolí
Escàner
Impressora

readfile.sh

#! / bin / bash

trobo 'Lectura de fitxer mitjançant l'ordre cat'

# Llegiu el contingut del fitxer amb l'ordre `cat`
contingut=`gathardware.txt`
trobo $ contingut

trobo 'Lectura de fitxer línia per línia mitjançant el bucle'

# Assigneu el nom del fitxer
nom de l'arxiu='hardware.txt'

# Cada línia del fitxer serà llegida per cada iteració del bucle
mentre llegirlínia;
fer
# imprimeix la línia
trobo $ línia
fet<$ nom de fitxer

Sortida:

Executeu les ordres següents.

$gathardware.txt
$bashreadfile.sh

Aquí, la primera ordre imprimirà el contingut del fitxer, hardware.txt sense executar cap script bash i la segona ordre executarà el script de readfile.sh i imprimeix el contingut del fitxer dues vegades utilitzant 'gat' ordre i 'llegir' ordre amb bucle while. Podeu visitar això tutorial per saber més sobre la lectura de fitxers línia per línia.

Arxiu d'escriptura en bash

Creeu un fitxer bash amb el següent script per escriure contingut nou en un fitxer nou i afegir-hi dades.

writefile.sh

#! / bin / bash

trobo 'Introduïu text'
#Llegeix les dades de la cadena
llegirstr1
#Afegiu dades d'entrada al fitxer per primera vegada
trobo $ str1 >test.txt

trobo 'Introduïu un altre text'
#Llegiu una altra cadena de dades
llegirstr2
#Afegeix dades d'entrada al final del fitxer
trobo $ str2 >>test.txt

# Mostra el contingut complet del fitxer
trobo `gattest.txt`

Sortida:

Executeu l'script.

$bashwritefile.sh

La següent sortida apareixerà després d'executar l'script.

Ves a dalt

Tubs

Pipe s’utilitza per redirigir qualsevol sortida d’ordres a una altra entrada d’ordres. Es pot utilitzar entre diferents tipus d'ordres bash per generar una sortida específica. L'entrada estàndard està connectada amb la sortida estàndard a Linux per canalització. Heu d’establir l’ordre en seqüència amb el símbol pipe (|) per obtenir la sortida desitjada. Es poden executar dues o més ordres juntes en una sola ordre utilitzant pipe. Heu d'executar diverses ordres en diverses línies sense canalitzar per fer la mateixa tasca. Per tant, l’ús de pipa és molt beneficiós per fer molts tipus de tasques de forma breu.

sintaxi:

command1|command2|...

Aquí, la sortida de la comanda1 es passarà com a entrada de la comanda2.

El mateix tipus de tasca es fa amb canonades i sense canonades a la següent part d'aquesta secció. Suposem un fitxer de text anomenat marques.txt es proporciona amb les dades següents.

marques.txt

Asraf CSE-409 79

Kabir CSE-304 95

Keya CSE-101 67

Asraf CSE-304 88

Keya CSE-409 90

Asraf CSE-101 92

Cal ordenar les dades del fitxer i esbrinar i imprimir tota l’entrada del nom de l’alumne ‘K . Podeu fer aquesta tasca executant diverses ordres sense utilitzar una canonada que es mostra a la secció següent. Les ordres següents hauran d'executar-se per obtenir la sortida desitjada. La primera ordre ordenarà el fitxer. La segona ordre cercarà l’entrada ‘K utilitzant ` adherència `Comanda i emmagatzema la sortida a un temp.txt dossier. La tercera ordre comptarà les línies totals d'un temp.txt arxiu mitjançant 'wc' comandament.

$ordenarmarques.txt
$adherència 'Keya'marques.txt>temp.txt
$wc -latemp.txt

Sortida:

Al fitxer hi ha dues entrades de l’alumne, ‘Keya’. Per tant, després d’executar les ordres anteriors, apareixerà la següent sortida.

Podeu combinar fàcilment les tres ordres anteriors i obtenir la mateixa sortida executant una sola ordre amb una canonada que es mostra a l'ordre següent. Aquí no es requereix cap fitxer temporal per obtenir la sortida. Aquí, la sortida del fitxer ` ordenar 'L'ordre es passarà com a entrada de adherència 'i la sortida del fitxer ` adherència 'passarà com a entrada per al fitxer 'wc' comandament.

$ordenarmarques.txt| adherència 'Keya' | wc -la

Sortida:

Després d’executar l’ordre anterior obtindreu la sortida següent, com la sortida de l’ordre anterior. La sortida de l'ordre serà 2.

Ves a dalt

Conclusió:

En aquest tutorial es tracta de tractar els temes més útils i necessaris del llenguatge de script bash. Esperem que el lector se’n beneficiï després de llegir aquest tutorial i pugui escriure script bash de manera més eficient.