Scripts Bash: primeiros passos

Scripts Bash: primeiros passos
Scripts Bash Parte 2: Loops
Scripts Bash, Parte 3: Opções e opções de linha de comando
Scripts Bash Parte 4: Entrada e Saída
Scripts Bash, Parte 5: Sinais, Tarefas em Segundo Plano, Gerenciamento de Scripts
Scripts Bash, Parte 6: Funções e Desenvolvimento de Biblioteca
Scripts Bash, Parte 7: sed e processamento de texto
Scripts Bash, parte 8: linguagem de processamento de dados awk
Scripts Bash Parte 9: Expressões Regulares
Bash Scripts Parte 10: Exemplos Práticos
Scripts Bash, parte 11: expectativa e automação de utilitários interativos

Hoje falaremos sobre scripts bash. Esse - scripts de linha de comando, escrito para o shell bash. Existem outros shells como zsh, tcsh, ksh, mas vamos nos concentrar no bash. Este material é destinado a todos, a única condição é a capacidade de trabalhar em linha de comando Linux.

Scripts Bash: primeiros passos

Os scripts de linha de comando são coleções dos mesmos comandos que podem ser inseridos no teclado, coletados em arquivos e unidos por algum propósito comum. Neste caso, os resultados do trabalho das equipas podem ter valor independente ou servir como dados de entrada para outras equipas. Os scripts são uma forma poderosa de automatizar ações executadas com frequência.

Scripts Bash: primeiros passos

Portanto, se falamos de linha de comando, ela permite executar vários comandos ao mesmo tempo, inserindo-os separados por ponto e vírgula:

pwd ; whoami

Na verdade, se você tentou isso em seu terminal, seu primeiro script bash envolvendo dois comandos já foi escrito. Funciona assim. Equipe primeiro pwd exibe informações sobre o diretório de trabalho atual, então o comando whoamimostra informações sobre o usuário com o qual você está conectado.

Usando esta abordagem, você pode combinar quantos comandos quiser em uma linha, o único limite é o número máximo de argumentos que podem ser passados ​​para o programa. Você pode definir esse limite usando o seguinte comando:

getconf ARG_MAX

A linha de comando é uma ótima ferramenta, mas você precisa inserir comandos nela sempre que precisar deles. E se escrevêssemos um conjunto de comandos em um arquivo e simplesmente chamássemos esse arquivo para executá-los? Na verdade, o arquivo do qual estamos falando é chamado de script de linha de comando.

Como funcionam os scripts bash

Crie um arquivo vazio usando o comando touch. Sua primeira linha precisa indicar qual shell iremos utilizar. Nós estamos interessados ​​em bash, então a primeira linha do arquivo será:

#!/bin/bash

Outras linhas neste arquivo usam o símbolo hash para indicar comentários que o shell não processa. Porém, a primeira linha é um caso especial, há um hash seguido por um ponto de exclamação (esta sequência é chamada shebang) e o caminho para bash, indique ao sistema que o script foi criado especificamente para bash.

Os comandos do shell são separados por um feed de linha, os comentários são separados por um sinal de hash. Isto é o que parece:

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

Aqui, assim como na linha de comando, você pode escrever comandos em uma linha, separados por ponto e vírgula. No entanto, se você escrever os comandos em linhas diferentes, o arquivo será mais fácil de ler. De qualquer forma, o shell irá processá-los.

Configurando permissões de arquivo de script

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

Scripts Bash: primeiros passos
Tentativa de executar um arquivo de script com permissões configuradas incorretamente

Vamos tornar o arquivo executável:

chmod +x ./myscript

Agora vamos tentar executá-lo:

./myscript

Depois de definir as permissões, tudo funciona como deveria.

Scripts Bash: primeiros passos
Executando script bash com sucesso

Saída de mensagem

Para enviar texto para o console Linux, use o comando echo. Vamos aproveitar o conhecimento desse fato e editar nosso script, adicionando explicações aos dados que são gerados pelos comandos já contidos nele:

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

Isto é o que acontece após executar o script atualizado.

Scripts Bash: primeiros passos
Saída de mensagens de um script

Agora podemos exibir notas explicativas usando o comando echo. Se você não sabe como editar um arquivo usando ferramentas do Linux ou nunca viu o comando antes echo, dê uma olhada este material.

Usando variáveis

As variáveis ​​permitem armazenar informações em um arquivo de script, como resultados de comandos, para uso por outros comandos.

Não há nada de errado em executar comandos individuais sem armazenar seus resultados, mas essa abordagem é bastante limitada em seus recursos.

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

  • variáveis ​​ambientais
  • Variáveis ​​de usuário

variáveis ​​ambientais

Às vezes, os comandos shell precisam funcionar com alguns dados do sistema. Aqui está um exemplo de como exibir o diretório inicial do usuário atual:

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

Observe que podemos usar uma variável de sistema $HOME entre aspas duplas, isso não impedirá que o sistema o reconheça. Isso é o que você obterá se executar o cenário acima.

Scripts Bash: primeiros passos
Usando uma variável de ambiente em um script

E se você precisar exibir um cifrão na tela? Vamos tentar isso:

echo "I have $1 in my pocket"

O sistema detectará um cifrão em uma string entre aspas e assumirá que referenciamos uma variável. O script tentará exibir o valor de uma variável indefinida $1. Não é disso que precisamos. O que fazer?

Nessa situação, usar o caractere de escape, uma barra invertida, antes do cifrão ajudará:

echo "I have $1 in my pocket"

O script agora produzirá exatamente o que é esperado.

Scripts Bash: primeiros passos
Usando uma sequência de escape para imprimir um cifrão

Variáveis ​​de usuário

Além das variáveis ​​de ambiente, os scripts bash permitem definir e usar suas próprias variáveis ​​no script. Essas variáveis ​​mantêm um valor até que o script conclua a execução.

Tal como acontece com as variáveis ​​do sistema, as variáveis ​​do usuário podem ser acessadas usando o cifrão:
TNW-CUS-FMP - código promocional com 10% de desconto em nossos serviços, disponível para ativação em 7 dias

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

Isto é o que acontece depois de executar esse script.

Scripts Bash: primeiros passos
Variáveis ​​personalizadas em um script

Substituição de comando

Um dos recursos mais úteis dos scripts bash é a capacidade de extrair informações da saída do comando 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 crase "`"
  • Por projeto $()

Ao usar a primeira abordagem, tome cuidado para não incluir aspas simples no lugar do crase. O comando deve ser colocado entre dois desses ícones:

mydir=`pwd`

Na segunda abordagem, a mesma coisa é escrita assim:

mydir=$(pwd)

E o script pode acabar ficando assim:

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

Durante sua operação, a saída do comando pwdserá salvo em uma variável mydir, cujo conteúdo, usando o comando echo, irá para o console.

Scripts Bash: primeiros passos
Um script que salva os resultados 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 uma construção como $((a+b)):

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

Scripts Bash: primeiros passos
Operações matemáticas em um script

construção de controle se-então

Em alguns cenários, é necessário controlar o fluxo de execução do comando. Por exemplo, se um determinado valor for maior que cinco, é necessário realizar uma ação, caso contrário, outra. Isto é aplicável em muitas situações, e aqui a estrutura de controle nos ajudará if-then. Na sua forma mais simples fica assim:

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

Aqui está um exemplo prático:

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

Neste caso, se o comando for executado pwdfor concluído com sucesso, o texto “funciona” será exibido no console.

Vamos usar o conhecimento que temos e escrever um roteiro mais complexo. Digamos que precisamos encontrar um determinado usuário em /etc/passwd, e se você conseguiu encontrá-lo, informe que ele existe.

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

Isto é o que acontece depois de executar este script.

Scripts Bash: primeiros passos
Pesquisa de usuário

Aqui usamos o comando greppara procurar um usuário em um arquivo /etc/passwd. Se a equipe grepdesconhecido para você, sua descrição pode ser encontrada aqui.

Neste exemplo, se o usuário for encontrado, o script exibirá uma mensagem correspondente. E se o usuário não puder ser encontrado? Nesse caso, o script simplesmente completará a execução sem nos dizer nada. Gostaríamos que ele nos contasse isso também, para melhorarmos o código.

construção de controle if-then-else

Para que o programa seja capaz de relatar tanto os resultados de uma busca bem-sucedida quanto de uma falha, usaremos a construção if-then-else. Veja como funciona:

if команда
then
команды
else
команды
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 prosseguirá ao longo do ramo else. Caso contrário, se for retornado algo diferente de zero, o que indicaria falha ou um resultado falso, os comandos após else.

Vamos escrever 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

Sua execução foi por água abaixo else.

Scripts Bash: primeiros passos
Executando um script com uma construção if-then-else

Bem, vamos seguir em frente e nos perguntar sobre condições mais complexas. E se você precisar verificar não uma condição, mas várias? Por exemplo, se o usuário desejado for encontrado, uma mensagem deverá ser exibida, se alguma outra condição for atendida, outra mensagem deverá ser exibida e assim por diante. Em tal situação, as condições aninhadas nos ajudarão. Se parece com isso:

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

Se o primeiro comando retornar zero, o que indica sua execução bem-sucedida, os comandos do 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

Nesse script, você pode, por exemplo, criar um novo usuário usando o comando useradd, se a pesquisa não produziu resultados, ou fez algo útil.

Comparação de números

Nos scripts você pode comparar valores numéricos. Abaixo está uma lista de comandos relevantes.

n1 -eq n2Retorna verdadeiro se n1 é igual n2.
n1 -ge n2 Retorna verdadeiro se n1mais ou igual n2.
n1 -gt n2Retorna verdadeiro se n1 больше n2.
n1 -le n2Retorna verdadeiro se n1menor ou igual n2.
n1 -lt n2Retorna verdadeiro se n1 for menor que n2.
n1 -ne n2Retorna verdadeiro se n1diferente n2.

Como exemplo, vamos tentar um dos operadores de comparação. Observe 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

Isto é o que este comando produzirá.

Scripts Bash: primeiros passos
Comparação de números em scripts

Valor variável val1maior que 5, a ramificação acaba sendo executada thenoperador de comparação e uma mensagem correspondente é exibida no console.

Comparação de strings

Os scripts também podem comparar valores de string. Os operadores de comparação parecem bastante simples, mas as operações de comparação de strings têm certos recursos, que abordaremos a seguir. Aqui está uma lista de operadores.

str1 = str2 Testa a igualdade das strings, retornando verdadeiro se as strings forem idênticas.
str1 != str2Retorna verdadeiro se as strings não forem idênticas.
str1 < str2Retorna verdadeiro se str1Menor que str2.
str1 > str2 Retorna verdadeiro se str1mais que str2.
-n str1 Retorna verdadeiro se comprimento str1Acima de zero.
-z str1Retorna verdadeiro se comprimento str1igual a zero.

Aqui está um exemplo de comparação de strings em um script:

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

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

Scripts Bash: primeiros passos
Comparando strings em scripts

Aqui está um recurso de comparação de strings que vale a pena mencionar. Ou seja, os operadores ">" e "<" devem ser escapados com uma barra invertida, caso contrário o script não funcionará corretamente, embora nenhuma mensagem de erro apareça. O script interpreta o sinal ">" como um comando de redirecionamento de saída.

Esta é a aparência do trabalho com esses 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

Aqui estão os resultados do script.

Scripts Bash: primeiros passos
Comparação de strings, aviso dado

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

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

Para nos livrarmos deste aviso, concluímos $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 deveria.

Scripts Bash: primeiros passos
Comparação de strings

Outra característica dos operadores “>” e “<” é como eles funcionam com caracteres maiúsculos e minúsculos. Para entender esse recurso, vamos preparar um arquivo de texto com o seguinte conteúdo:

Likegeeks
likegeeks

Vamos salvá-lo dando um nome myfilee execute o seguinte comando no terminal:

sort myfile

Ele classificará as linhas do arquivo assim:

likegeeks
Likegeeks

Equipe sort, por padrão, classifica as strings em ordem crescente, ou seja, a letra minúscula em nosso exemplo é menor que a 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 você executá-lo, acontece que tudo está ao contrário - a letra minúscula agora é maior que a maiúscula.

Scripts Bash: primeiros passos
O comando sort e comparação de strings em um arquivo de script

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

Equipe sort, por sua vez, usa a ordem de classificação especificada nas configurações de idioma do sistema.

Verificações de arquivos

Talvez os comandos a seguir sejam usados ​​com mais frequência em scripts bash. Eles permitem que você verifique várias condições relacionadas aos arquivos. Aqui está uma lista desses comandos.

-d fileVerifica se um arquivo existe e é um diretório.
-e fileVerifica se o arquivo existe.
-f file Verifica se um arquivo existe e é um arquivo.
-r fileVerifica se o arquivo existe e é legível.
-s file ПVerifica se o arquivo existe e não está vazio.
-w fileVerifica se o arquivo existe e é gravável.
-x fileVerifica se o arquivo existe e é executável.
file1 -nt file2 Verifica se é mais recente file1do que file2.
file1 -ot file2Verifica se é mais velho file1do que file2.
-O file Verifica se o arquivo existe e pertence ao usuário atual.
-G fileVerifica se o arquivo existe e se seu ID de grupo corresponde ao ID de grupo do usuário atual.

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

Vamos tentar 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.

Scripts Bash: primeiros passos
Listando o conteúdo de um diretório

Acreditamos que você mesmo pode experimentar os comandos restantes; todos eles são usados ​​​​de acordo com o mesmo princípio.

Resultados de

Hoje falamos sobre como começar a escrever scripts bash e abordamos algumas coisas básicas. Na verdade, o tópico da programação bash é enorme. Este artigo é uma tradução da primeira parte de uma grande série de 11 materiais. Se quiser continuar agora, aqui está uma lista dos originais desses materiais. Por conveniência, a tradução que você acabou de ler está incluída aqui.

  1. Script Bash passo a passo - aqui estamos falando sobre como começar a criar scripts bash, o uso de variáveis ​​​​é considerado, são descritas estruturas condicionais, cálculos, comparações de números, strings e descoberta de informações sobre arquivos.
  2. Bash Scripting Parte 2, Bash, o incrível — aqui são reveladas as características de trabalhar com loops for e while.
  3. Bash Scripting Parte 3, Parâmetros e opções — este material é dedicado aos parâmetros de linha de comando e chaves que podem ser passadas para scripts, trabalhando com dados que o usuário insere e que podem ser lidos em arquivos.
  4. Bash Scripting Parte 4, Entrada e Saída - aqui estamos falando sobre descritores de arquivos e como trabalhar com eles, sobre entrada, saída, fluxos de erro e sobre redirecionamento de saída.
  5. Bash Scripting Parte 5, Sighals e Jobs — este material é dedicado aos sinais do Linux, seu processamento em scripts e lançamento de scripts de acordo com uma programação.
  6. Bash Scripting Parte 6, Funções — aqui você pode aprender sobre como criar e usar funções em scripts e desenvolver bibliotecas.
  7. Bash Scripting Parte 7, Usando sed — este artigo é dedicado a trabalhar com o editor de texto de streaming sed.
  8. Bash Scripting Parte 8, Usando awk — este material é dedicado à programação na linguagem de processamento de dados awk.
  9. Bash Scripting Parte 9, Expressões Regulares — aqui você pode ler sobre o uso de expressões regulares em scripts bash.
  10. Bash Scripting Parte 10, Exemplos Práticos — aqui estão técnicas para trabalhar com mensagens que podem ser enviadas aos usuários, bem como um método para monitoramento de disco.
  11. Bash Scripting Parte 11, Esperar Comando — este material é dedicado à ferramenta Expect, com a qual você pode automatizar a interação com utilitários interativos. Em particular, estamos falando de scripts esperados e sua interação com scripts bash e outros programas.

Acreditamos que uma das características valiosas desta série de artigos é que, partindo do mais simples, adequado para usuários de qualquer nível, aos poucos leva a temas bastante sérios, dando a todos a chance de avançar na criação de scripts de linha de comando do Linux .

Queridos leitores! Pedimos aos gurus da programação bash que falem sobre como alcançaram o auge da maestria, compartilhem seus segredos e esperamos receber as impressões daqueles que acabaram de escrever seu primeiro roteiro.

Scripts Bash: primeiros passos

Apenas usuários registrados podem participar da pesquisa. Entrarpor favor

Devo traduzir o restante da série de artigos?

  • Sim!

  • Não, não há necessidade

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

Fonte: habr.com

Adicionar um comentário