Scripts Bash: o comezo

Scripts Bash: o comezo
Scripts Bash Parte 2: Loops
Scripts Bash, Parte 3: Opcións e interruptores da liña de comandos
Scripts Bash Parte 4: entrada e saída
Scripts Bash, parte 5: sinais, tarefas en segundo plano, xestión de scripts
Scripts Bash, parte 6: funcións e desenvolvemento da biblioteca
Scripts Bash, parte 7: sed e procesamento de textos
Scripts Bash, parte 8: linguaxe de procesamento de datos awk
Scripts Bash Parte 9: Expresións regulares
Scripts Bash Parte 10: Exemplos prácticos
Scripts Bash, parte 11: espera e automatización de utilidades interactivas

Hoxe falaremos dos scripts bash. Este - scripts de liña de comandos, escrito para o shell bash. Hai outros shells como zsh, tcsh, ksh, pero centrarémonos en bash. Este material está pensado para todos, a única condición é a capacidade de traballar liña de comando Linux.

Scripts Bash: o comezo

Os scripts de liña de comandos son coleccións dos mesmos comandos que se poden introducir desde o teclado, recollelos en ficheiros e unidos por algún propósito común. Neste caso, os resultados do traballo dos equipos poden ser de valor independente ou servir como datos de entrada para outros equipos. Os scripts son un xeito poderoso de automatizar as accións que se realizan con frecuencia.

Scripts Bash: o comezo

Entón, se falamos da liña de comandos, permíteche executar varios comandos á vez introducíndoos separados por punto e coma:

pwd ; whoami

De feito, se probaches isto no teu terminal, xa está escrito o teu primeiro script bash que inclúe dous comandos. Funciona así. Equipo primeiro pwd mostra información sobre o directorio de traballo actual e, a continuación, o comando whoamimostra información sobre o usuario no que iniciaches sesión.

Usando este enfoque, pode combinar tantos comandos como queira nunha liña, o único límite é o número máximo de argumentos que se poden pasar ao programa. Podes definir este límite usando o seguinte comando:

getconf ARG_MAX

A liña de comandos é unha excelente ferramenta, pero tes que introducir comandos nela cada vez que os necesites. E se escribimos un conxunto de comandos nun ficheiro e simplemente chamamos a ese ficheiro para executalos? De feito, o ficheiro do que falamos chámase script de liña de comandos.

Como funcionan os scripts bash

Crea un ficheiro baleiro usando o comando touch. A súa primeira liña precisa indicar que shell imos usar. Interésanos bash, polo que a primeira liña do ficheiro será:

#!/bin/bash

Outras liñas deste ficheiro usan o símbolo hash para indicar comentarios que o shell non procesa. Non obstante, a primeira liña é un caso especial, hai un hash seguido dun signo de admiración (esta secuencia chámase shebang) e o camiño para bash, indique ao sistema para o que se creou especificamente o script bash.

Os comandos de shell están separados por un avance de liña, os comentarios están separados por un signo hash. Este é o que parece:

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

Aquí, igual que na liña de comandos, pode escribir comandos nunha liña, separados por punto e coma. Non obstante, se escribe os comandos en liñas diferentes, o ficheiro é máis fácil de ler. En calquera caso, o shell procesaraos.

Establecer permisos de ficheiros de script

Garda o ficheiro dándolle un nome myscript, e o traballo de creación do script bash está case rematado. Agora só queda facer este ficheiro executable, se non, se tentas executalo, atoparás un erro Permission denied.

Scripts Bash: o comezo
Tentando executar un ficheiro de script con permisos configurados incorrectamente

Imos facer o ficheiro executable:

chmod +x ./myscript

Agora imos tentar executalo:

./myscript

Despois de configurar os permisos, todo funciona como debería.

Scripts Bash: o comezo
Executouse correctamente o script bash

Saída da mensaxe

Para enviar texto á consola Linux, use o comando echo. Aproveitemos o coñecemento deste feito e editemos o noso script, engadindo explicacións aos datos que saen os comandos que xa están nel:

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

Isto é o que ocorre despois de executar o script actualizado.

Scripts Bash: o comezo
Saír mensaxes dun guión

Agora podemos mostrar notas explicativas mediante o comando echo. Se non sabes como editar un ficheiro usando ferramentas de Linux, ou non viu o comando antes echo, bótalle un ollo isto as cousas.

Usando Variables

As variables permítenlle almacenar información nun ficheiro de script, como os resultados dos comandos, para a súa utilización por outros comandos.

Non hai nada de malo en executar comandos individuais sen almacenar os seus resultados, pero este enfoque é bastante limitado nas súas capacidades.

Hai dous tipos de variables que se poden usar nos scripts bash:

  • Variables de ambiente
  • Variables de usuario

Variables de ambiente

Ás veces, os comandos de shell necesitan funcionar con algúns datos do sistema. Aquí tes un exemplo de como mostrar o directorio de inicio do usuario actual:

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

Teña en conta que podemos usar unha variable do sistema $HOME entre comiñas dobres, isto non impedirá que o sistema o recoñeza. Isto é o que obtén se executas o escenario anterior.

Scripts Bash: o comezo
Usando unha variable de ambiente nun script

E se necesitas mostrar un sinal de dólar na pantalla? Imos probar isto:

echo "I have $1 in my pocket"

O sistema detectará un signo de dólar nunha cadea entre comiñas e asumirá que fixemos referencia a unha variable. O script tentará mostrar o valor dunha variable non definida $1. Isto non é o que necesitamos. Que facer?

Nesta situación, usar o carácter de escape, unha barra invertida, antes do signo de dólar axudará:

echo "I have $1 in my pocket"

O script agora mostrará exactamente o que se espera.

Scripts Bash: o comezo
Usando unha secuencia de escape para imprimir un signo de dólar

Variables de usuario

Ademais das variables de ambiente, os scripts bash permítenche definir e usar as túas propias variables no script. Tales variables manteñen un valor ata que o script completa a execución.

Do mesmo xeito que coas variables do sistema, pódese acceder ás variables de usuario mediante o signo de dólar:
TNW-CUS-FMP: código promocional para un desconto do 10 % nos nosos servizos, dispoñible para a súa activación en 7 días

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

Isto é o que ocorre despois de executar un script deste tipo.

Scripts Bash: o comezo
Variables personalizadas nun script

Substitución de comandos

Unha das características máis útiles dos scripts bash é a capacidade de extraer información da saída do comando e asignala a variables, o que lle permite usar esta información en calquera lugar do ficheiro de script.

Hai dúas formas de facelo.

  • Usando o backtick "`"
  • Por deseño $()

Ao usar o primeiro enfoque, teña coidado de non incluír unha soa comiña no lugar do backtick. O comando debe estar incluído en dúas iconas deste tipo:

mydir=`pwd`

No segundo enfoque, escríbese o mesmo así:

mydir=$(pwd)

E o guión pode quedar así:

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

Durante o seu funcionamento, a saída do comando pwdgardarase nunha variable mydir, cuxo contido, mediante o comando echo, irá á consola.

Scripts Bash: o comezo
Un script que garda os resultados dun comando nunha variable

Operacións matemáticas

Para realizar operacións matemáticas nun ficheiro de script, pode usar unha construción como $((a+b)):

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

Scripts Bash: o comezo
Operacións matemáticas nun guión

construción de control se-entón

Nalgúns escenarios, cómpre controlar o fluxo de execución de comandos. Por exemplo, se un determinado valor é maior que cinco, cómpre realizar unha acción, se non, outra. Isto é aplicable en moitas situacións, e aquí a estrutura de control axudaranos if-then. Na súa forma máis sinxela ten o seguinte aspecto:

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

Aquí tes un exemplo de traballo:

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

Neste caso, se se executa o comando pwdcompletarase correctamente, o texto "funciona" aparecerá na consola.

Aproveitemos os coñecementos que temos e escribamos un guión máis complexo. Digamos que necesitamos atopar un determinado usuario /etc/passwd, e se conseguiches atopalo, informa que existe.

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

Isto é o que ocorre despois de executar este script.

Scripts Bash: o comezo
Busca de usuarios

Aquí usamos o comando greppara buscar un usuario nun ficheiro /etc/passwd. Se o equipo grepdescoñecido para vostede, pódese atopar a súa descrición aquí.

Neste exemplo, se se atopa o usuario, o script mostrará unha mensaxe correspondente. E se non se atopa o usuario? Neste caso, o script simplemente completará a execución sen dicirnos nada. Gustaríanos que tamén nos fale sobre isto, así que melloraremos o código.

construción de control if-then-else

Para que o programa poida informar tanto dos resultados dunha busca exitosa como do fracaso, utilizaremos a construción if-then-else. Así é como funciona:

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

Se o primeiro comando devolve cero, o que significa que se executou correctamente, a condición será verdadeira e a execución non se realizará ao longo da rama. else. En caso contrario, se se devolve algo distinto de cero, o que indicaría un fallo ou un resultado falso, os comandos despois else.

Escribamos o seguinte 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

A súa execución foi polo sumidoiro else.

Scripts Bash: o comezo
Execución dun script cunha construción if-then-else

Pois sigamos e preguntémonos por condicións máis complexas. E se precisa comprobar non unha condición, senón varias? Por exemplo, se se atopa o usuario desexado, debería mostrarse unha mensaxe, se se cumpre algunha outra condición, debería mostrarse outra mensaxe, etc. Nesta situación, as condicións aniñadas axudaranos. Parece así:

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

Se o primeiro comando devolve cero, o que indica a súa execución exitosa, executaranse os comandos do primeiro bloque then, en caso contrario, se a primeira condición é falsa e se o segundo comando devolve cero, executarase o segundo bloque de código.

#!/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

Neste script, pode, por exemplo, crear un novo usuario usando o comando useradd, se a busca non deu resultados ou fai outra cousa útil.

Comparación de números

Nos scripts podes comparar valores numéricos. A continuación móstrase unha lista de comandos relevantes.

n1 -eq n2Devolve verdadeiro se n1 é igual n2.
n1 -ge n2 Devolve verdadeiro se n1máis ou igual n2.
n1 -gt n2Devolve verdadeiro se n1 máis que n2.
n1 -le n2Devolve verdadeiro se n1menor ou igual n2.
n1 -lt n2Devolve verdadeiro se n1 é menor que n2.
n1 -ne n2Devolve verdadeiro se n1non igual n2.

Como exemplo, probemos un dos operadores de comparación. Teña en conta que a expresión está entre corchetes.

#!/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

Isto é o que sairá este comando.

Scripts Bash: o comezo
Comparación de números en guións

Valor variable val1superior a 5, a rama acaba executándose thenoperador de comparación e móstrase unha mensaxe correspondente na consola.

Comparación de cadeas

Os scripts tamén poden comparar valores de cadea. Os operadores de comparación parecen bastante sinxelos, pero as operacións de comparación de cadeas teñen certas características, que trataremos a continuación. Aquí tes unha lista de operadores.

str1 = str2 Proba a igualdade de cadeas, devolvendo verdadeiro se as cadeas son idénticas.
str1 != str2Devolve verdadeiro se as cadeas non son idénticas.
str1 < str2Devolve verdadeiro se str1menos de str2.
str1 > str2 Devolve verdadeiro se str1máis que str2.
-n str1 Devolve verdadeiro se a lonxitude str1Por riba de cero.
-z str1Devolve verdadeiro se a lonxitude str1igual a cero.

Aquí tes un exemplo de comparación de cadeas nun script:

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

Como resultado da execución do script, obtemos o seguinte.

Scripts Bash: o comezo
Comparación de cadeas en guións

Aquí tes unha característica da comparación de cadeas que paga a pena mencionar. É dicir, os operadores ">" e "<" deben escaparse cunha barra invertida, se non, o script non funcionará correctamente, aínda que non aparecerá ningunha mensaxe de erro. O script interpreta o signo ">" como un comando de redirección de saída.

Así é como se traballa con estes operadores no código:

#!/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í están os resultados do guión.

Scripts Bash: o comezo
Comparación de cadeas, aviso dado

Teña en conta que o script, aínda que está executado, emite unha advertencia:

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

Para desfacernos deste aviso, conclúemos $val2 entre comiñas dobres:

#!/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

Agora todo funciona como debería.

Scripts Bash: o comezo
Comparación de cadeas

Outra característica dos operadores ">" e "<" é como funcionan con maiúsculas e minúsculas. Para comprender esta función, preparemos un ficheiro de texto co seguinte contido:

Likegeeks
likegeeks

Salvámoslle dándolle un nome myfile, despois executa o seguinte comando no terminal:

sort myfile

Ordenará as liñas do ficheiro así:

likegeeks
Likegeeks

Equipo sort, por defecto, ordena as cadeas en orde ascendente, é dicir, a letra minúscula do noso exemplo é máis pequena que a maiúscula. Agora imos preparar un script que compare as mesmas cadeas:

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

Se o executas, resulta que todo é ao revés: a letra minúscula agora é máis grande que a maiúscula.

Scripts Bash: o comezo
O comando ordenar e comparar cadeas nun ficheiro de script

Nos comandos de comparación, as letras maiúsculas son máis pequenas que as minúsculas. A comparación de cadeas faise aquí comparando os códigos ASCII dos caracteres, polo que a orde de ordenación depende dos códigos de caracteres.

Equipo sort, á súa vez, utiliza a orde de clasificación especificada na configuración do idioma do sistema.

Comprobacións de arquivos

Quizais os seguintes comandos se usen con máis frecuencia nos scripts bash. Permítenche comprobar varias condicións relativas aos ficheiros. Aquí tes unha lista destes comandos.

-d fileComproba se existe un ficheiro e é un directorio.
-e fileComproba se o ficheiro existe.
-f file Comproba se existe un ficheiro e é un ficheiro.
-r fileComproba se o ficheiro existe e é lexible.
-s file ПComproba se o ficheiro existe e non está baleiro.
-w fileComproba se o ficheiro existe e se pode escribir.
-x fileComproba se o ficheiro existe e é executable.
file1 -nt file2 Comproba se é máis novo file1que file2.
file1 -ot file2Comproba se é máis vello file1que file2.
-O file Comproba se o ficheiro existe e é propiedade do usuario actual.
-G fileComproba se o ficheiro existe e se o seu ID de grupo coincide co ID de grupo do usuario actual.

Estes comandos, así como moitos outros que se comentan hoxe, son fáciles de lembrar. Os seus nomes, sendo abreviaturas de varias palabras, indican directamente as comprobacións que realizan.

Probemos un dos comandos na 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

Este script, para un directorio existente, mostrará o seu contido.

Scripts Bash: o comezo
Listar o contido dun directorio

Cremos que pode experimentar vostede mesmo cos comandos restantes; todos úsanse segundo o mesmo principio.

Resultados de

Hoxe falamos de como comezar a escribir scripts bash e tratamos algunhas cousas básicas. De feito, o tema da programación bash é enorme. Este artigo é unha tradución da primeira parte dunha gran serie de 11 materiais. Se queres continuar agora mesmo, aquí tes unha lista dos orixinais destes materiais. Por comodidade, a tradución que acabas de ler inclúese aquí.

  1. Bash Script paso a paso — aquí estamos a falar de como comezar a crear scripts bash, considérase o uso de variables, descríbense estruturas condicionais, cálculos, comparacións de números, cadeas e información sobre os ficheiros.
  2. Bash Scripting Parte 2, Bash the awesome — aquí revélanse as características de traballar con bucles for e while.
  3. Bash Scripting Parte 3, Parámetros e opcións — este material está dedicado a parámetros de liña de comandos e claves que se poden pasar a scripts, traballando con datos que introduce o usuario e que poden ler desde ficheiros.
  4. Bash Scripting Parte 4, entrada e saída - aquí estamos a falar de descritores de ficheiros e de traballar con eles, de entrada, saída, fluxos de erros e de redirección de saída.
  5. Bash Scripting Parte 5, Sighals & Jobs — este material está dedicado aos sinais de Linux, ao seu procesamento en scripts e ao lanzamento de scripts nunha programación.
  6. Bash Scripting Parte 6, Funcións — Aquí podes aprender a crear e usar funcións en scripts e desenvolver bibliotecas.
  7. Bash Scripting Parte 7, Usando sed — este artigo está dedicado a traballar co editor de texto en streaming sed.
  8. Bash Scripting Parte 8, Usando awk — este material está dedicado á programación na linguaxe de procesamento de datos awk.
  9. Bash Scripting Parte 9, Expresións regulares — aquí podes ler sobre o uso de expresións regulares nos scripts bash.
  10. Bash Scripting Parte 10, exemplos prácticos — Aquí tes técnicas para traballar con mensaxes que se poden enviar aos usuarios, así como un método para supervisar o disco.
  11. Bash Scripting Parte 11, Expect Command — este material está dedicado á ferramenta Expect, coa que pode automatizar a interacción con utilidades interactivas. En particular, estamos a falar de scripts expect e a súa interacción con scripts bash e outros programas.

Cremos que unha das características valiosas desta serie de artigos é que, partindo do máis sinxelo, axeitado para usuarios de calquera nivel, leva aos poucos a temas bastante serios, dando a todos a oportunidade de avanzar na creación de scripts de liña de comandos de Linux. .

Queridos lectores! Pedimos aos gurús da programación de bash que falen sobre como chegaron á cima do seu dominio, que compartan os seus segredos e agardamos recibir impresións dos que acaban de escribir o seu primeiro guión.

Scripts Bash: o comezo

Só os usuarios rexistrados poden participar na enquisa. Rexístrate, por favor.

Debo traducir o resto da serie de artigos?

  • Si!

  • Non é necesario

Votaron 1030 usuarios. 106 usuarios abstivéronse.

Fonte: www.habr.com

Engadir un comentario