Guía de inicio para BASH - Parámetros de entrada

Benvido á 2 ª parte da guía Beginners To BASH, que é única porque é o único tutorial BASH escrito por un novato para principiantes.

Os lectores desta guía construírán os seus coñecementos a medida que acumule o meu coñecemento e, con sorte, ao final de todo, poderiamos escribir uns guións bastante intelixentes.

A semana pasada cubrín a creación do teu primeiro script que simplemente mostraba as palabras "Hello World". Abarca temas como editores de texto, como abrir unha xanela de terminal, onde poñer as súas secuencias de comandos, como amosar as palabras "Hello World" e algúns puntos máis finos sobre os personaxes de escape como comiñas ("").

Esta semana vou a cubrir os parámetros de entrada. Hai outras guías que ensinan este tipo de cousas, pero creo que saltan a un nivel bastante baixo e quizais proporcionan demasiada información.

¿Que é un parámetro?

No guión "Hello World" do último tutorial todo era moi estático. O guión realmente non fixo moito en absoluto.

Como podemos mellorar no script "Hello World"?

Que tal un guión que saúda á persoa que o executa? No canto de dicir "Hello World" dirá "Hello Gary", "Hello Tim" ou "Hello Dolly".

Sen a capacidade de aceptar parámetros de entrada teriamos que escribir tres scripts "hellogary.sh", "hellotim.sh" e "hellodolly.sh".

Ao permitir que o noso script lea os parámetros de entrada, podemos usar un script para saludar a ninguén.

Para facelo, abra unha xanela de terminal (CTRL + ALT + T) e navegue no seu cartafol de scripts escribindo o seguinte: ( sobre o comando cd )

scripts de cd

Crea un novo script chamado greetme.sh escribindo o seguinte: ( sobre o comando touch )

toque greetme.sh

Abra o script no seu editor favorito escribindo o seguinte: ( sobre o comando nano )

nano greetme.sh

Insira o seguinte texto dentro de nano:

#! / bin / bash echo "hola $ @"

Prema CTRL e O para gardar o ficheiro e despois CTRL e X para pechar o ficheiro.

Para executar o script introduza o seguinte na liña de comandos que substitúe co seu nome.

sh greetme.sh

Se eu executar o script co meu nome, amosa as palabras "Hello Gary".

A primeira liña ten a liña #! / Bin / bash que se usa para identificar o ficheiro como script bash.

A segunda liña usa a instrución de eco para facer eco da palabra hola e despois hai unha rara notación de $ @. ( sobre comando de eco )

O $ @ expande para mostrar todos os parámetros que se ingresaron xunto co nome do script. Entón, se escribiu "sh greetme.sh tim", as palabras "hello tim" mostraranse. Se ingresou "greetme.sh tim Smith" entón se mostrarían as palabras "hello tim smith".

Podería ser bo para o script greetme.sh só dicir hola usando só o primeiro nome. Ninguén di "hello gary newell" cando me atopan, pero poden dicir "hola gary".

Cambiemos o script para que simplemente use o primeiro parámetro. Abra o script greetme.sh en nano escribindo o seguinte:

nano greetme.sh

Cambia o script para que diga o seguinte:

#! / bin / bash echo "hello $ 1"

Garda o script premendo CTRL e O e logo saia premendo CTRL e X.

Executa o script como se mostra a continuación (substitúe o meu nome co seu):

sh greetme.sh gary newell

Cando executas o script simplemente dirá "hello gary" (ou esperanzadamente "hola" e calquera que sexa o teu nome.

O 1 despois do símbolo $ basicamente di ao comando echo, usa o primeiro parámetro. Se substitúe os $ 1 cun $ 2, entón mostraría "hello newell" (ou o que sexa o seu apelido).

Por certo, se substituíches os $ 2 cun $ 3 e executaba o script con só 2 parámetros, a saída sería simplemente "Hola".

É posible amosar e xestionar o número de parámetros realmente introducidos e nos últimos tutoriais vou mostrar como usar o contador de parámetros con fins de validación.

Para amosar a cantidade de parámetros introducidos, abra o script greetme.sh (nano greetme.sh) e modifique o texto do seguinte xeito:

#! / bin / bash echo "ingresou $ # nomes" eco "hola $ @"

Prema CTRL e O para gardar o script e CTRL e X para saír do nano.

O $ # na segunda liña mostra o número de parámetros introducidos.

Ata agora todo isto foi novedoso pero non moi útil. Quen precisa un script que simplemente amosa "Ola"?

O uso real para as declaracións de eco é proporcionar resultados detallados e significativos para o usuario. Se che podes imaxinar que queres facer algo complicado que implique un número crítico grave e unha manipulación de ficheiros / carpetas, sería útil amosar ao usuario o que está a suceder cada paso do camiño.

Pola contra, os parámetros de entrada fan que o seu script sexa interactivo. Sen parámetros de entrada necesitarías decenas de guións facendo cousas moi similares pero con nomes lixeiramente diferentes.

Con todo isto en mente hai outros parámetros de entrada útiles que é unha boa idea saber e vou incluílos todo nun fragmento de código.

Abra o script greetme.sh e cambie o seguinte:

#! / bin / bash echo "Nome do ficheiro: $ 0" eco "ID do proceso: $$" eco "---------------------------- --- "eco" entrou $ # nomes "eco" hola $ @ "

Prema CTRL e O para gardar o ficheiro e CTRL e X para saír.

Agora executa o script (substitúe co teu nome).

sh greetme.sh

Nesta ocasión, o script mostra o seguinte:

Nome do ficheiro: greetme.sh ID do proceso: 18595 ------------------------------ entrou 2 nomes hello gary newell

Os $ 0 na primeira liña do script amosan o nome do script que está a executar. Teña en conta que é dólar cero e non o dólar.

O $$ na segunda liña mostra a ID do proceso do script que está a executar. Por que isto é útil? Se está a executar un script no primeiro plano pode cancelalo premendo CTRL e C. Se executou o script en segundo plano e comezou a facer loops e facía o mesmo unha e outra vez ou comezou a causar danos ao seu sistema, necesitaría para matalo.

Para matar un script que se executa en segundo plano precisa da ID do proceso do script. Non sería bo se o script deu a ID do proceso como parte da súa saída. ( sobre comandos ps e kill )

Finalmente, antes de rematar con este tema, quería comentar sobre onde vai a saída. Cada vez que o script se executa ata o momento, a saída foi exhibida na pantalla.

É bastante común que a escrita de saída sexa escrita nun ficheiro de saída. Para facelo executar o seu guión como segue:

sh greetme.sh gary> greetme.log

O símbolo> no comando anterior emite o texto "hello gary" a un ficheiro chamado greetme.log.

Cada vez que executa o script co símbolo> sobreescribe os contidos do ficheiro de saída. Se prefire engadir ao ficheiro, substitúa o> con >>.

Resumo

Agora debería poder escribir texto na pantalla e aceptar os parámetros de entrada.