Scripts Bash: com començar

Scripts Bash: com començar
Bash Scripts Part 2: bucles
Scripts Bash, part 3: opcions i commutadors de la línia d'ordres
Scripts Bash, part 4: entrada i sortida
Scripts Bash, part 5: senyals, tasques de fons, gestió de scripts
Bash Scripts, Part 6: Funcions i desenvolupament de biblioteques
Scripts Bash, part 7: sed i processament de textos
Bash Scripts, Part 8: El llenguatge de processament de dades awk
Bash Scripts Part 9: Expressions regulars
Bash Scripts Part 10: exemples pràctics
Scripts Bash, part 11: espera i automatització de les utilitats interactives

Avui parlarem dels scripts bash. Això - scripts de línia d'ordres, escrit per al shell bash. Hi ha altres shells, com ara zsh, tcsh, ksh, però ens centrarem en bash. Aquest material està pensat per a tothom, l'única condició és la capacitat de treballar-hi línia d'ordres Linux.

Scripts Bash: com començar

Els scripts de línia d'ordres són conjunts de les mateixes ordres que es poden introduir des del teclat, recopilades en fitxers i unides per un propòsit comú. Al mateix temps, els resultats del treball dels equips poden ser de valor independent o servir d'input per a altres equips. Els scripts són una manera potent d'automatitzar les accions que es realitzen amb freqüència.

Scripts Bash: com començar

Per tant, si parlem de la línia d'ordres, permet executar diverses ordres alhora, introduint-les amb un punt i coma:

pwd ; whoami

De fet, si ho heu provat al vostre terminal, ja s'ha escrit el vostre primer script bash que utilitza dues ordres. Funciona així. Primer equip pwd mostra informació sobre el directori de treball actual i després l'ordre whoamimostra informació sobre l'usuari amb el qual heu iniciat sessió.

Amb aquest enfocament, podeu combinar tantes ordres com vulgueu en una línia, el límit és només el nombre màxim d'arguments que es poden passar al programa. Podeu definir aquest límit amb l'ordre següent:

getconf ARG_MAX

La línia d'ordres és una eina fantàstica, però heu d'introduir-hi ordres cada vegada que les necessiteu. Què passa si escrivim un conjunt d'ordres en un fitxer i simplement cridem aquest fitxer per executar-los? De fet, el fitxer del qual estem parlant s'anomena script de línia d'ordres.

Com funcionen els scripts bash

Creeu un fitxer buit amb l'ordre touch. A la seva primera línia, heu d'especificar quin shell farem servir. Ens interessa bash, de manera que la primera línia del fitxer seria:

#!/bin/bash

En altres llocs d'aquest fitxer, el símbol hash s'utilitza per indicar comentaris que l'intèrpret d'ordres no processa. Tanmateix, la primera línia és un cas especial, és un signe de lletra seguit d'un signe d'exclamació (aquesta seqüència s'anomena shebang) i el camí cap a bash, indiqueu al sistema per al qual s'ha creat específicament l'script bash.

Les ordres de l'intèrpret d'ordres estan separades per un salt de línia, els comentaris estan separats per un signe de lletra. Aquí teniu el que sembla:

#!/bin/bash
# This is a comment
pwd
whoami

Aquí, igual que a la línia d'ordres, podeu escriure ordres en una línia, separant-les amb un punt i coma. Tanmateix, si escriviu ordres en línies diferents, el fitxer és més fàcil de llegir. En qualsevol cas, el shell els processarà.

Configuració de permisos en un fitxer de script

Deseu el fitxer posant-li un nom myscript, i l'script bash està gairebé acabat. Ara només queda fer que aquest fitxer sigui executable, en cas contrari, quan intenteu executar-lo, trobareu un error Permission denied.

Scripts Bash: com començar
S'està intentant executar un fitxer d'script amb permisos configurats incorrectament

Fem que el fitxer sigui executable:

chmod +x ./myscript

Ara intentem executar-lo:

./myscript

Després de configurar els permisos, tot funciona com cal.

Scripts Bash: com començar
Executeu correctament l'script bash

Sortida del missatge

Per imprimir text a la consola Linux, utilitzeu l'ordre echo. Utilitzem el coneixement d'aquest fet i editem el nostre script, afegint explicacions a les dades que generen les ordres que ja hi ha:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Això és el que passa després d'executar l'script actualitzat.

Scripts Bash: com començar
Emissió de missatges des d'un script

Ara podem mostrar etiquetes explicatives mitjançant l'ordre echo. Si no sabeu com editar un fitxer amb les eines de Linux, o si no heu vist l'ordre abans echo, fes-hi una ullada aquest el material.

Ús de variables

Les variables us permeten emmagatzemar informació en un fitxer d'script, com ara els resultats de les ordres, per utilitzar-la per altres ordres.

No hi ha res dolent en executar ordres individuals sense emmagatzemar els resultats del seu treball, però les possibilitats d'aquest enfocament són molt limitades.

Hi ha dos tipus de variables que es poden utilitzar als scripts bash:

  • Variables del mediambient
  • Variables d'usuari

Variables del mediambient

De vegades, les ordres de l'intèrpret d'ordres han de funcionar amb algunes dades del sistema. Per exemple, a continuació es mostra com es mostra el directori inicial de l'usuari actual:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Tingueu en compte que podem utilitzar la variable del sistema $HOME entre cometes dobles, això no impedirà que el sistema el reconegui. Això és el que passa si executeu l'script anterior.

Scripts Bash: com començar
Ús d'una variable d'entorn en un script

Però, què passa si voleu mostrar un signe de dòlar? Anem a provar això:

echo "I have $1 in my pocket"

El sistema detectarà un signe de dòlar en una cadena delimitada per cometes i suposarà que hem fet referència a una variable. L'script intentarà mostrar el valor d'una variable no definida. $1. Això no és el que necessitem. Què fer?

En una situació com aquesta, utilitzar el caràcter de control de la barra inclinada inversa abans del signe del dòlar ajuda:

echo "I have $1 in my pocket"

Ara l'script mostrarà exactament el que s'espera.

Scripts Bash: com començar
Ús d'una seqüència d'escapada per emetre un signe de dòlar

Variables d'usuari

A més de les variables d'entorn, els scripts bash us permeten establir i utilitzar les vostres pròpies variables a l'script. Aquestes variables mantenen un valor fins que finalitza l'script.

Igual que amb les variables del sistema, es pot accedir a les variables d'usuari mitjançant el signe del dòlar:
TNW-CUS-FMP - codi promocional per a un 10% de descompte en els nostres serveis, disponible per a l'activació en 7 dies

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Això és el que passa després d'executar un script d'aquest tipus.

Scripts Bash: com començar
Variables personalitzades en script

Substitució de comandaments

Una de les característiques més útils dels scripts bash és la capacitat d'extreure informació de la sortida de les ordres i assignar-la a variables, la qual cosa us permet utilitzar aquesta informació a qualsevol lloc del fitxer de script.

Això es pot fer de dues maneres.

  • Amb el caràcter de retrocés "`"
  • Amb l'ajuda de la construcció $()

Quan utilitzeu el primer enfocament, aneu amb compte de no utilitzar una cita única en lloc d'un tic enrere. L'ordre s'ha d'incloure en dues d'aquestes icones:

mydir=`pwd`

En el segon enfocament, el mateix s'escriu així:

mydir=$(pwd)

I el guió, al final, podria semblar així:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Durant el seu funcionament, la sortida de l'ordre pwds'emmagatzemarà en una variable mydir, el contingut del qual, utilitzant l'ordre echo, anirà a la consola.

Scripts Bash: com començar
Script que desa els resultats de l'ordre en una variable

Operacions matemàtiques

Per realitzar operacions matemàtiques en un fitxer script, podeu utilitzar una construcció del formulari $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Scripts Bash: com començar
Operacions matemàtiques en un guió

estructura de control si-aleshores

En alguns escenaris, cal controlar el flux d'execució d'ordres. Per exemple, si un valor determinat és superior a cinc, s'ha de realitzar una acció, en cas contrari una altra. Això és aplicable en moltes situacions, i aquí l'estructura de control ens ajudarà if-then. En la seva forma més senzilla, es veu així:

if команда
then
команды
fi

I aquí teniu un exemple de treball:

#!/bin/bash
if pwd
then
echo "It works"
fi

En aquest cas, si l'execució de l'ordre pwdes completa correctament, el text "funciona" es mostrarà a la consola.

Utilitzem els coneixements que tenim i escrivim un escenari més complex. Suposem que hem de trobar un usuari /etc/passwd, i si s'ha trobat, informa que existeix.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Això és el que passa després d'executar aquest script.

Scripts Bash: com començar
Cerca d'usuaris

Aquí hem utilitzat l'ordre grepper cercar un usuari en un fitxer /etc/passwd. Si l'equip grepdesconegut per a vostè, es pot trobar la seva descripció aquí.

En aquest exemple, si es troba l'usuari, l'script mostrarà un missatge adequat. Què passa si no es pogués trobar l'usuari? En aquest cas, l'script simplement completarà l'execució sense dir-nos res. M'agradaria que també ens parlés d'això, així que millorem el codi.

El constructe de control if-then-else

Perquè el programa pugui informar tant dels resultats d'una cerca correcta com d'un fracàs, utilitzem la construcció if-then-else. A continuació es mostra com es configura:

if команда
then
команды
else
команды
fi

Si la primera ordre retorna zero, el que significa que s'ha executat correctament, la condició serà certa i l'execució no anirà per la branca. else. En cas contrari, si es retorna una cosa diferent de zero, el que significa un error o un resultat fals, les ordres posteriors else.

Escrivim el següent script:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

La seva execució va seguir la línia else.

Scripts Bash: com començar
Execució d'un script amb una construcció if-then-else

Bé, seguim endavant i ens preguntem per condicions més difícils. Què passa si heu de comprovar no una condició, sinó diverses? Per exemple, si es troba l'usuari requerit, s'hauria de mostrar un missatge, si es compleix alguna altra condició, s'hauria de mostrar un altre missatge, etc. En aquesta situació, les condicions imbricades ens ajudaran. Es veu així:

if команда1
then
команды
elif команда2
then
команды
fi

Si la primera ordre retorna zero, cosa que indica la seva execució correcta, s'executaran les ordres del primer bloc then, en cas contrari, si la primera condició és falsa i si la segona ordre retorna zero, s'executarà el segon bloc de codi.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

En aquest script, podeu, per exemple, crear un usuari nou amb l'ordre useradd, si la cerca no ha donat resultats, o feu alguna cosa més útil.

Comparació de números

En els scripts, podeu comparar valors numèrics. A continuació es mostra una llista d'ordres rellevants.

n1 -eq n2Retorna cert si n1 és igual n2.
n1 -ge n2 Retorna cert si n1més o igual n2.
n1 -gt n2Retorna cert si n1 més que n2.
n1 -le n2Retorna cert si n1menor o igual n2.
n1 -lt n2Retorna cert si n1 és menor que n2.
n1 -ne n2Retorna cert si n1no és igual n2.

Com a exemple, provem un dels operadors de comparació. Tingueu en compte que l'expressió es troba entre claudàtors.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Aquí teniu el que sortirà aquesta comanda.

Scripts Bash: com començar
Comparació de nombres en scripts

Valor variable val1superior a 5, finalment s'executa la branca thenoperador de comparació i el missatge corresponent es mostra a la consola.

Comparació de cordes

Els scripts també poden comparar valors de cadena. Els operadors de comparació semblen bastant simples, però els operadors de comparació de cadenes tenen certes peculiaritats, que tractarem a continuació. Aquí teniu una llista d'operadors.

str1 = str2 Comprova la igualtat de les cadenes, retorna cert si les cadenes són idèntiques.
str1 != str2Retorna true si les cadenes no són idèntiques.
str1 < str2Retorna cert si str1menys que str2.
str1 > str2 Retorna cert si str1més que str2.
-n str1 Retorna true si la longitud str1Per sobre de zero.
-z str1Retorna true si la longitud str1és igual a zero.

Aquí teniu un exemple de comparació de cadenes en un script:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Com a resultat de l'execució de l'script, obtenim el següent.

Scripts Bash: com començar
Comparació de cadenes en scripts

Aquí hi ha una característica de la comparació de cadenes que val la pena esmentar. És a dir, els operadors ">" i "<" s'han d'escapar amb una barra invertida, en cas contrari l'script no funcionarà correctament, tot i que no apareixerà cap missatge d'error. L'script interpreta el signe ">" com una ordre per redirigir la sortida.

A continuació es mostra com es veu treballar amb aquests operadors al codi:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Aquí teniu els resultats del guió.

Scripts Bash: com començar
Comparació de cordes, avís llançat

Tingueu en compte que l'script, tot i que s'està executant, dóna un avís:

./myscript: line 5: [: too many arguments

Per desfer-se d'aquest avís, concloem $val2 entre cometes dobles:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ara tot funciona com cal.

Scripts Bash: com començar
Comparació de cordes

Una altra característica dels operadors ">" i "<" és com funcionen amb caràcters en majúscules i minúscules. Per entendre aquesta característica, preparem un fitxer de text amb el contingut següent:

Likegeeks
likegeeks

Guarda-ho amb un nom myfilei, a continuació, executeu l'ordre següent al terminal:

sort myfile

Ordenarà les línies del fitxer de la següent manera:

likegeeks
Likegeeks

Equip sort, per defecte, ordena les cadenes en ordre ascendent, és a dir, la lletra minúscula del nostre exemple és menor que la lletra majúscula. Ara preparem un script que compararà les mateixes cadenes:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Si l'executeu, resulta que és cert el contrari: la lletra minúscula és ara més gran que la majúscula.

Scripts Bash: com començar
ordre d'ordenació i comparació de cadenes al fitxer de script

En les ordres de comparació, les lletres majúscules són més petites que les minúscules. La comparació de cadenes aquí es fa comparant els codis de caràcters ASCII, per tant l'ordre depèn dels codis de caràcters.

Equip sort, al seu torn, utilitza l'ordre d'ordenació especificat a la configuració d'idioma del sistema.

Comprovacions de fitxers

Potser les ordres següents s'utilitzen amb més freqüència als scripts bash. Us permeten comprovar diverses condicions dels fitxers. Aquí teniu una llista d'aquestes ordres.

-d fileComprova si existeix un fitxer i si és un directori.
-e fileComprova si existeix un fitxer.
-f file Comprova si existeix un fitxer i si és un fitxer.
-r fileComprova si el fitxer existeix i és llegible.
-s file ПComprova si el fitxer existeix i no està buit.
-w fileComprova si el fitxer existeix i es pot escriure.
-x fileComprova si un fitxer existeix i és executable.
file1 -nt file2 Comprova si és més nou file1que file2.
file1 -ot file2Comprova si és més gran file1que file2.
-O file Comprova si el fitxer existeix i és propietat de l'usuari actual.
-G fileComprova si el fitxer existeix i si el seu ID de grup coincideix amb l'ID de grup de l'usuari actual.

Aquestes ordres, així com moltes altres que es comenten avui, són fàcils de recordar. Els seus noms, al ser abreviatures de diverses paraules, indiquen directament les comprovacions que realitzen.

Provem una de les ordres a la pràctica:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Aquest script, per a un directori existent, mostrarà el seu contingut.

Scripts Bash: com començar
Llistar el contingut d'un directori

Creiem que podeu experimentar amb la resta d'ordres pel vostre compte, totes s'apliquen segons el mateix principi.

Resultats de

Avui hem parlat de com començar a escriure scripts bash i hem tractat algunes coses bàsiques. De fet, el tema de la programació bash és enorme. Aquest article és una traducció de la primera part d'una gran sèrie d'11 materials. Si voleu continuar ara mateix, aquí teniu una llista dels originals d'aquests materials. Per comoditat, s'inclou aquí la traducció del qual acabeu de llegir.

  1. Bash Script pas a pas - Aquí estem parlant de com començar a crear scripts bash, es considera l'ús de variables, es descriuen construccions condicionals, càlculs, comparacions de nombres, cadenes, esbrina informació sobre fitxers.
  2. Bash Scripting Part 2, Bash the awesome - aquí es revelen les característiques de treballar amb bucles for i while.
  3. Bash Scripting Part 3, Paràmetres i opcions - Aquest material està dedicat a paràmetres de línia d'ordres i claus que es poden passar a scripts, treballant amb dades que l'usuari introdueix i que es poden llegir des dels fitxers.
  4. Bash Scripting Part 4, entrada i sortida - Aquí estem parlant de descriptors de fitxers i treballant amb ells, d'entrada, sortida, errors, fluxos de redirecció de sortida.
  5. Bash Scripting Part 5, Sighals i treballs — aquest material està dedicat als senyals de Linux, el seu processament en scripts, llançament de script programat.
  6. Bash Scripting Part 6, Funcions - Aquí podeu aprendre sobre la creació i l'ús de funcions en scripts, sobre el desenvolupament de biblioteques.
  7. Bash Scripting Part 7, Ús de sed — aquest article tracta de treballar amb l'editor de text sed stream.
  8. Bash Scripting Part 8, utilitzant awk — aquest material està dedicat a la programació en el llenguatge de processament de dades awk.
  9. Bash Scripting Part 9, Expressions regulars - aquí podeu llegir sobre l'ús d'expressions regulars als scripts bash.
  10. Bash Scripting Part 10, exemples pràctics - Aquí hi ha mètodes per treballar amb missatges que es poden enviar als usuaris, així com un mètode per supervisar el disc.
  11. Bash Scripting Part 11, Expect Command - aquest material està dedicat a l'eina Expect, amb la qual podeu automatitzar la interacció amb utilitats interactives. En particular, es tracta dels scripts expectatives i de com interactuen amb els scripts bash i altres programes.

Creiem que una de les grans coses d'aquesta sèrie d'articles és que parteix del més bàsic, adequat per a usuaris de qualsevol nivell, condueix a temes força seriosos, donant a tothom l'oportunitat d'avançar en l'escriptura de la línia d'ordres de Linux.

Benvolguts lectors! Demanem als gurus de la programació de bash que parlin de com han arribat a l'altura del domini, comparteixen secrets i estem esperant les impressions dels que acaben d'escriure el seu primer guió.

Scripts Bash: com començar

Només els usuaris registrats poden participar en l'enquesta. Inicia sessiósi us plau.

Traduir la resta de la sèrie d'articles?

  • Sí!

  • No no cal

Han votat 1030 usuaris. 106 usuaris es van abstenir.

Font: www.habr.com

Afegeix comentari