Bash scripts: introdução

Bash scripts: introdução
Bash scripts, parte 2: loops
Bash scripts, parte 3: parâmetros e opções de linha de comando
Bash scripts, parte 4: entrada e saída
Bash scripts, parte 5: sinais, tarefas em segundo plano, controle de scripts
Bash scripts, parte 6: funções e desenvolvimento de bibliotecas
Bash scripts, parte 7: sed e processamento de textos
Bash scripts, parte 8: linguagem de processamento de dados awk
Bash scripts, parte 9: expressões regulares
Bash scripts, parte 10: exemplos práticos
Bash scripts, parte 11: expect e automação de utilitários interativos

Hoje vamos falar sobre bash scripts. Isso é — scripts de linha de comando, escritos para o shell bash. Existem outros shells, como zsh, tcsh, ksh, mas vamos nos concentrar no bash. Este material é destinado a todos os interessados, o único requisito é saber trabalhar na linha de comando Linux.

Bash scripts: introdução

Scripts de linha de comando são conjuntos dos mesmos comandos que podem ser digitados no teclado, reunidos em arquivos e combinados com um objetivo comum. Os resultados da execução dos comandos podem ter valor próprio ou servir como entrada para outros comandos. Scripts são uma maneira poderosa de automatizar ações frequentemente executadas.

Bash scripts: introdução

Então, se falarmos sobre a linha de comando, ela permite executar vários comandos de uma só vez, digitando-os separados por ponto e vírgula:

pwd ; whoami

Na verdade, se você testou isso no seu terminal, seu primeiro bash script, que envolve dois comandos, já foi escrito. Funciona assim. Primeiro, o comando pwd exibe na tela informações sobre o diretório de trabalho atual, depois o comando whoamimostra os dados do usuário que está logado no sistema.

Usando essa abordagem, você pode combinar quantos comandos quiser em uma única linha, a única limitação é o número máximo de argumentos que pode ser passado para o programa. Essa limitação pode ser determinada com o seguinte comando:

getconf ARG_MAX

A linha de comando é uma ótima ferramenta, mas os comandos precisam ser digitados cada vez que necessário. Que tal gravar um conjunto de comandos em um arquivo e simplesmente chamar esse arquivo para executá-los? Na verdade, o arquivo do qual estamos falando é chamado de script de linha de comando.

Como são estruturados os bash scripts

Crie um arquivo vazio usando o comando touch. Na sua primeira linha, é necessário indicar qual shell vamos utilizar. Nos interessa bash, portanto a primeira linha do arquivo será assim:

#!/bin/bash

Nas outras linhas desse arquivo, o símbolo de sustenido é usado para denotar comentários que o shell não processa. No entanto, a primeira linha é um caso especial, onde o sustenido seguido de um ponto de exclamação (essa sequência é chamada de shebang) e o caminho para bash, informam ao sistema que o script foi criado especificamente para bash.

Os comandos do shell são separados por quebras de linha, e os comentários são destacados pelo símbolo de sustenido. Veja como isso fica:

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

Aqui, assim como na linha de comando, você pode escrever comandos em uma linha, separando-os com ponto e vírgula. No entanto, se você escrever comandos em linhas diferentes, o arquivo ficará mais fácil de ler. De qualquer forma, o shell os processará.

Definindo permissões para o arquivo de script

Salve o arquivo, dando a ele o nome myscript, e o trabalho de criação do script bash está quase finalizado. Agora, só falta tornar este arquivo executável; caso contrário, ao tentar executá-lo, você encontrará um erro Permission denied.

Bash scripts: introdução
Tentativa de executar o arquivo de script com permissões configuradas incorretamente

Vamos tornar o arquivo executável:

chmod +x .\/myscript

Agora vamos tentar executá-lo:

.\/myscript

Após ajustar as permissões, tudo funciona como deveria.

Bash scripts: introdução
Execução bem-sucedida do script bash

Saída de mensagens

Para exibir texto no console do Linux, utiliza-se o comando echo. Vamos usar esse conhecimento e editar nosso script, adicionando explicações aos dados que as já existentes comandos dele exibem:

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

Aqui está o que acontecerá após a execução do script atualizado.

Bash scripts: introdução
Saída de mensagens do script

Agora podemos exibir descrições, utilizando o comando echo. Se você não souber como editar um arquivo utilizando os recursos do Linux, ou se nunca se deparou com o comando echo, dê uma olhada no este material.

Uso de variáveis

As variáveis permitem armazenar informações no arquivo de script, como os resultados do trabalho dos comandos para uso por outros comandos.

Não há nada de errado em executar comandos individuais sem armazenar os resultados, mas as possibilidades dessa abordagem são bastante limitadas.

Existem dois tipos de variáveis que podem ser usadas em scripts bash:

  • Variáveis de ambiente
  • Variáveis de usuário

Variáveis de ambiente

Às vezes, em scripts de shell, é necessário trabalhar com certos dados do sistema. Por exemplo, veja como exibir o diretório home do usuário atual:

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

Observe que podemos usar a variável de sistema $HOME entre aspas duplas, isso não impedirá que o sistema a reconheça. Veja o que acontecerá se executarmos o script acima.

Bash scripts: introdução
Uso de variável de ambiente em um script

E se quisermos exibir o símbolo de dólar na tela? Vamos tentar assim:

echo "Eu tenho $1 no meu bolso"

O sistema detectará o sinal de dólar na string, delimitada por aspas, e decidirá que estamos nos referindo a uma variável. O script tentará exibir o valor de uma variável indefinida $1. Isso não é o que precisamos. O que fazer?

Nessa situação, podemos usar o caractere de escape, uma barra invertida, antes do símbolo de dólar:

echo "Eu tenho $1 no meu bolso"

Agora o script exibirá exatamente o que se espera.

Bash scripts: introdução
Uso de sequência de controle para exibir o símbolo de dólar

Variáveis de usuário

Além das variáveis de ambiente, scripts bash permitem criar e usar suas próprias variáveis no script. Essas variáveis armazenam o valor até que a execução do script seja concluída.

Assim como nas variáveis do sistema, as variáveis de usuário podem ser acessadas usando o símbolo de dólar:
TNW-CUS-FMP — um código promocional para 10% de desconto em nossos serviços, disponível para ativação por 7 dias

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

Veja o que acontece após a execução desse script.

Bash scripts: introdução
Variáveis de usuário no script

Substituição de comandos

Uma das funcionalidades mais úteis dos scripts bash é a capacidade de extrair informações da saída de comandos e atribuí-las a variáveis, permitindo usar essas informações em qualquer lugar do arquivo de script.

Isso pode ser feito de duas maneiras.

  • Usando o símbolo de acento grave «`»
  • Usando a construção $()

Ao usar a primeira abordagem, certifique-se de não inserir uma aspa simples em vez do acento grave. O comando deve ser delimitado por dois desses símbolos:

mydir=`pwd`

Na segunda abordagem, a mesma coisa é escrita assim:

mydir=$(pwd)

E o script, no final, pode parecer assim:

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

Durante sua execução, a saída do comando pwdserá salva na variável mydir, cujo conteúdo, através do comando echo, aparecerá no console.

Bash scripts: introdução
Script que armazena os resultados da execução de um comando em uma variável

Operações matemáticas

Para realizar operações matemáticas em um arquivo de script, você pode usar a seguinte construção $((a+b)):

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

Bash scripts: introdução
Operações matemáticas em scripts

Construção de controle if-then

Em alguns scripts, é necessário controlar o fluxo de execução dos comandos. Por exemplo, se um determinado valor for maior que cinco, uma ação deve ser executada; caso contrário, outra deve ser realizada. Isso se aplica a várias situações, e é aqui que a construção de controle nos ajuda. if-then. Em sua forma mais simples, ela se apresenta assim:

if comando
then
comandos
fi

Aqui está um exemplo funcional:

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

Neste caso, se a execução do comando pwdfor bem-sucedida, a mensagem «it works» será exibida no console.

Vamos usar o que já sabemos e escrever um script mais complexo. Digamos, precisamos encontrar um determinado usuário em /etc/passwd, e se encontrá-lo for bem-sucedido, informar que ele existe.

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

Aqui está o que acontece após executar este script.

Bash scripts: introdução
Busca de usuário

Aqui usamos o comando greppara buscar um usuário no arquivo /etc/passwd. Se o comando grepé novo para você, sua descrição pode ser encontrada aqui.

Neste exemplo, se o usuário for encontrado, o script exibirá a mensagem correspondente. Mas e se não conseguirmos localizar o usuário? Nesse caso, o script simplesmente terminará a execução, sem nos informar. Gostaríamos que ele dissesse isso também, portanto, vamos aprimorar o código.

Construção de controle if-then-else

Para que o programa possa relatar tanto os resultados de uma busca bem-sucedida quanto de uma falha, utilizaremos a construção if-then-else. Aqui está como ela funciona:

if comando
then
comandos
else
comandos
fi

Se o primeiro comando retornar zero, o que significa que foi executado com sucesso, a condição será verdadeira e a execução não seguirá pelo ramo else. Caso contrário, se algo diferente de zero for retornado, o que significará uma falha ou um resultado falso, os comandos localizados após else.

serão executados. Vamos escrever um script assim:

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

Sua execução seguiu pelo ramo else.

Bash scripts: introdução
Execução do script com a construção if-then-else

Bem, continuamos avançando e nos deparamos com a questão de condições mais complexas. E se precisarmos verificar mais de uma condição? Por exemplo, se o usuário desejado for encontrado, precisamos exibir uma mensagem; se outra condição for atendida, exibimos outra mensagem, e assim por diante. Nessa situação, condições aninhadas podem nos ajudar. Veja como fica:

if comando1
then
comandos
elif comando2
then
comandos
fi

Se o primeiro comando retornar zero, o que indica que foi executado com sucesso, os comandos no primeiro bloco serão executados. then, caso contrário, se a primeira condição for falsa e o segundo comando retornar zero, o segundo bloco de código será executado.

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

Em um script como esse, você pode, por exemplo, criar um novo usuário usando o comando useradd, se a busca não retornar resultados, ou fazer algo mais útil.

Comparação de números

Nos scripts, é possível comparar valores numéricos. Abaixo está uma lista dos comandos correspondentes.

n1 -eq n2Retorna verdadeiro se n1 for igual a n2.
n1 -ge n2 Retorna verdadeiro se n1maior ou igual a n2.
n1 -gt n2Retorna verdadeiro se n1 mais n2.
n1 -le n2Retorna verdadeiro se n1menor ou igual a n2.
n1 -lt n2Retorna verdadeiro se n1 for menor que n2.
n1 -ne n2Retorna verdadeiro se n1diferente de n2.

Como exemplo, vamos testar um dos operadores de comparação. Note que a expressão está entre colchetes.

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

Isso é o que este comando irá exibir.

Bash scripts: introdução
Comparação de números em scripts

O valor da variável val1é maior que 5, assim sendo, a ramificação do operador de comparação é executada e a mensagem correspondente é exibida no console. thenComparação de strings

Nos scripts, também é possível comparar valores de strings. Os operadores de comparação parecem bastante simples, mas as operações de comparação de strings têm algumas particularidades que abordaremos a seguir. Aqui está a lista dos operadores.

str1 = str2

Verifica a igualdade das strings e retorna verdadeiro se as strings forem idênticas. str1 != str2
sRetorna verdadeiro se as strings não forem idênticas.str1 < str2
Retorna verdadeiro sestr1 for menor questr2 str1 > str2.
maior que str1 for menor que-n str1 str1 > str2.
Retorna verdadeiro se o comprimento for maior que zero. for menor que-z str1
for igual a zero.for maior que zero. for menor queAqui está um exemplo de comparação de strings em um script:

Como resultado da execução do script, teremos o seguinte.

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

Comparação de strings em scripts

Bash scripts: introdução
Comparação de strings em scripts

Uma característica do comparativo de strings que vale a pena mencionar é que os operadores ">" e "" como um comando de redirecionamento de saída.

Aqui está como o trabalho com esses operadores se apresenta 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

Aqui estão os resultados da execução do script.

Bash scripts: introdução
Comparação de strings, aviso exibido

Observe que o script, embora execute, emite um aviso:

.\/myscript: linha 5: [: muitos argumentos

Para eliminar esse aviso, envolva $val2 entre aspas duplas:

#!/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 tudo funciona como deve.

Bash scripts: introdução
Nos scripts, também é possível comparar valores de strings. Os operadores de comparação parecem bastante simples, mas as operações de comparação de strings têm algumas particularidades que abordaremos a seguir. Aqui está a lista dos operadores.

Outra característica dos operadores ">" e "<" é como eles lidam com caracteres em maiúsculas e minúsculas. Para entender essa característica, vamos preparar um arquivo de texto com o seguinte conteúdo:

Likegeeks
likegeeks

Vamos salvá-lo com o nome myfile, e em seguida, executar no terminal o seguinte comando:

sort myfile

Isso irá classificar as linhas do arquivo da seguinte maneira:

likegeeks
Likegeeks

Time sort, por padrão, classifica as linhas em ordem crescente, ou seja, uma letra minúscula no nosso exemplo é menor que uma maiúscula. Agora vamos preparar um script que irá comparar as mesmas strings:

#!/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 for executado, descobrirá que tudo está invertido — a letra minúscula agora é maior que a maiúscula.

Bash scripts: introdução
O comando sort e a comparação de strings no arquivo do script

Nos comandos de comparação, letras maiúsculas são consideradas menores que minúsculas. A comparação de strings aqui é feita comparando os códigos ASCII dos caracteres; a ordem de classificação, assim, depende dos códigos dos caracteres.

Time sort, por sua vez, utiliza a ordem de classificação definida nas configurações do idioma do sistema.

Verificações de arquivos

Talvez os seguintes comandos sejam os mais comumente usados em scripts bash. Eles permitem verificar diferentes condições relacionadas a arquivos. Aqui está uma lista desses comandos.

-d fileVerifica se o arquivo existe e se é um diretório.
-e fileVerifica se o arquivo existe.
-f file Verifica se o arquivo existe e se é um arquivo.
-r fileVerifica se o arquivo existe e está acessível para leitura.
-s fileVerifica se o arquivo existe e não está vazio.
-w fileVerifica se o arquivo existe e está acessível para gravação.
-x fileVerifica se o arquivo existe e é executável.
file1 -nt file2 Verifica se é mais recente que file1, do que file2.
file1 -ot file2Verifica se é mais antigo que file1, do que file2.
-O file Verifica se o arquivo existe e se o proprietário é o usuário atual.
-G fileVerifica se o arquivo existe e se o seu ID de grupo corresponde ao ID de grupo do usuário atual.

Esses comandos, assim como muitos outros abordados hoje, são fáceis de lembrar. Seus nomes, sendo abreviações de várias palavras, indicam diretamente as verificações que realizam.

Vamos testar um dos comandos na prática:

#!/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 um diretório existente, exibirá seu conteúdo.

Bash scripts: introdução
Exibindo o conteúdo do diretório

Acreditamos que, com os outros comandos, você poderá experimentar por conta própria, todos eles são aplicados de acordo com o mesmo princípio.

Resultados

Hoje falamos sobre como começar a escrever scripts em bash e discutimos algumas coisas básicas. Na verdade, o tema da programação em bash é enorme. Este artigo é a tradução da primeira parte de uma grande série de 11 materiais. Se você deseja a continuidade agora mesmo — aqui está a lista original desses materiais. Para facilitar, incluímos também aquele cuja tradução você acaba de ler.

  1. Bash Script Passo a Passo — aqui discute-se como começar a criar bash scripts, o uso de variáveis, a descrição de estruturas condicionais, cálculos, comparação de números e strings, e a obtenção de informações sobre arquivos.
  2. Parte 2 do Script Bash, Bash o incrível — aqui são exploradas as características do trabalho com os loops for e while.
  3. Parte 3 do Script Bash, Parâmetros e opções — este material é dedicado aos parâmetros da linha de comando e às chaves que podem ser passadas para scripts, ao trabalho com dados que o usuário insere e que podem ser lidos de arquivos.
  4. Parte 4 do Script Bash, Entrada e Saída — aqui discute-se sobre descritores de arquivos e como trabalhá-los, sobre fluxos de entrada, saída, erros, e redirecionamento de saída.
  5. Parte 5 do Script Bash, Sinais e Trabalhos — este material é dedicado aos sinais do Linux, seu tratamento em scripts e a execução de scripts programados.
  6. Parte 6 do Script Bash, Funções — aqui você pode aprender a criar e usar funções em scripts, sobre o desenvolvimento de bibliotecas.
  7. Parte 7 do Script Bash, Usando sed — este artigo é dedicado ao trabalho com o editor de texto de fluxo sed.
  8. Parte 8 do Script Bash, Usando awk — este material é dedicado à programação na linguagem de processamento de dados awk.
  9. Parte 9 do Script Bash, Expressões Regulares — aqui você pode ler sobre o uso de expressões regulares em scripts bash.
  10. Scripting Bash Parte 10, Exemplos Práticos — aqui estão apresentados métodos de trabalho com mensagens que podem ser enviadas aos usuários, bem como a metodologia de monitoramento de disco.
  11. Scripting Bash Parte 11, Comando Expect — este material é dedicado à ferramenta Expect, que permite automatizar a interação com utilitários interativos. Em particular, discute-se aqui os scripts expect e sua interação com scripts bash e outros programas.

Acreditamos que uma das propriedades valiosas desta série de artigos é que ela, começando com o mais simples, adequado para usuários de qualquer nível, gradualmente leva a temas bastante severos, dando a todos os interessados a chance de avançar na criação de scripts de linha de comando no Linux.

Caros leitores! Pedimos aos gurus da programação bash que compartilhem como alcançaram os píncaros da maestria, compartilhem segredos, e daqueles que acabaram de escrever seu primeiro script, aguardamos impressões.

Bash scripts: introdução

Apenas usuários registrados podem participar da pesquisa. Entre, por favor.

Traduzir as outras partes do ciclo de artigos?

  • Sim!

  • Não, não é necessário

Votaram 1030 usuários. 106 usuários se abstiveram.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster