Como criar scripts de shell simples no Linux
Criar scripts de shell é uma das habilidades mais essenciais que os usuários do Linux devem ter na ponta dos dedos. Os scripts Shell desempenham um papel enorme na automatização de tarefas repetitivas que, de outra forma, seriam tediosas de serem executadas linha por linha.
Neste tutorial, destacamos algumas das operações básicas de shell script que todo usuário Linux deve ter.
1. Crie um script de shell simples
Um script de shell é um arquivo que contém texto ASCII. Começaremos criando um script de shell simples e, para isso, usaremos um editor de texto. Existem vários editores de texto, tanto de linha de comando quanto baseados em GUI. Para este guia, usaremos o editor vim.
Começaremos criando um script simples que exibe “Hello world” quando executado.
vim hello.sh
Cole o seguinte conteúdo no arquivo e salve.
#!/bin/bash
Print Hello world message
echo "Hello World!"
Vamos examinar o shell script linha por linha.
- A primeira linha –
#!/bin/bash
– é conhecida como cabeçalho shebang. Esta é uma construção especial que indica qual programa será usado para interpretar o script. Neste caso, este será o shell bash indicado por /bin/bash. Existem outras linguagens de script, como Python, que é denotada por#!/usr/bin/python3
e Perl, cujo cabeçalho shebang é denotado por#!/usr/bin/perl
. - A segunda linha é um comentário. Um comentário é uma declaração que descreve o que um script de shell faz e o que não é executado quando o script é executado. Os comentários são sempre precedidos pelo sinal de hash
#
. - A última linha é o comando que imprime a mensagem ‘Hello World’ no terminal.
A próxima etapa é tornar o script executável atribuindo permissão de execução usando o comando chmod conforme mostrado.
chmod +x hello.sh
Finalmente, execute o script shell usando um dos comandos:
bash hello.sh
OR
./hello.sh
2. Usando instruções condicionais para executar código
Como outras linguagens de programação, declarações condicionais são usadas em scripts bash para tomar decisões, com apenas uma ligeira variação na sintaxe. Abordaremos as declarações condicionais if, if-else e elif.
Exemplo de apenas uma instrução if
A instrução if pode ser usada para testar condições únicas ou múltiplas. Começaremos com o uso fundamental da instrução if para testar uma única condição. A instrução if é definida pelos blocos if ... fi
.
if command
then
statement
fi
Vamos dar uma olhada no script de shell abaixo.
#!/bin/bash
echo 'Enter the score'
read x
if [[ $x == 70 ]]; then
echo 'Good job!'
fi
O script de shell acima solicita que o usuário forneça uma pontuação que é então armazenada em uma variável x. Se a pontuação corresponder a 70, o script retornará a saída “Bom trabalho! ”. O operador de comparação ==
é utilizado para testar se a pontuação inserida, que está armazenada na variável x, é equivalente a 100.
Outros operadores de comparação que você pode usar incluem:
-eq
– Igual a-ne
– Diferente de-lt
– Menor que-le
– Menor ou igual a-lt
– Menor que-ge
– Maior ou igual a
Por exemplo, o bloco if-statement abaixo imprime ‘Work Harder’ se a pontuação de entrada for qualquer valor menor que 50.
if [[ $x -lt 50 ]]; then
echo 'Work Harder!'
fi
Exemplo de uma instrução if-else
Para situações em que você tem 2 resultados possíveis: – seja isto ou aquilo – a instrução if-else é útil.
if command
then
statement1
else
statement2
fi
O script abaixo lê a pontuação de entrada e verifica se ela é maior ou igual a 70.
Se a pontuação for maior ou igual a 70, você receberá a mensagem ‘Ótimo trabalho, você passou!’. No entanto, se a pontuação ficar abaixo de 70, a saída ‘Você falhou’ será impressa.
#!/bin/bash
echo 'Enter the score'
read x
if [[ $x -ge 70 ]]; then
echo 'Great job, You passed!'
else
echo 'You failed'
fi
Exemplo de uma instrução if-elif-else
Em cenários onde existem múltiplas condições e resultados diferentes, a instrução if-elif-else é usada. Esta declaração assume o seguinte formato.
if condition1
then
statement1
elif condition2
then
statement2
else
statement3
fi
Por exemplo, temos um script para uma loteria que verifica se o número inserido é 90, 60 ou 30.
#!/bin/bash
echo 'Enter the score'
read x
if [[ $x -eq 90 ]];
then
echo “You have won the First Prize”
elif [[ $x -eq 60 ]];
then
echo “You have won the Second Prize”
elif [[ $x -eq 30 ]];
then
echo “You have won the Second Prize”
else
echo “Please try again”
fi
3. Usando a instrução If com lógica AND
Você pode usar a instrução if juntamente com o operador lógico AND para executar uma tarefa se duas condições forem satisfeitas. O operador &&
é usado para denotar a lógica AND.
#!/bin/bash
echo 'Please Enter your user_id'
read user_id
echo 'Please Enter your tag_no'
read tag_id
if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
echo “Login successful”
else
echo “Login failure”
fi
5. Usando a instrução If com lógica OR
Ao usar a lógica OR, que é representada pelo símbolo ||
, qualquer uma das condições precisa ser satisfeita com o script para fornecer os resultados esperados.
#!/bin/bash
echo 'Please enter a random number'
read number
if [[ (number -eq 55 || number -eq 80) ]];
then
echo 'Congratulations! You’ve won'
else
echo 'Sorry, try again'
fi
Use construções de loop
Bash loops permitem que os usuários executem uma série de tarefas até que um determinado resultado seja alcançado. Isso é útil na execução de tarefas repetitivas. Nesta seção, daremos uma olhada em alguns dos loops que você também encontrará em outras linguagens de programação.
Enquanto loop
Este é um dos loops mais fáceis de trabalhar. A sintaxe é bastante simples:
while <some test>
do
commands
done
O loop while abaixo lista todos os números de 1 a 10 quando executado.
#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
do
echo $counter
((counter++))
done
Vamos discutir o loop while:
A variável counter é inicializada em 1. E enquanto a variável for menor ou igual a 10, o valor do contador será incrementado até que a condição seja satisfeita. A linha echo $counter imprime todos os números de 1 a 10.
Para loop
Assim como o loop while, um loop for é usado para executar o código iterativamente. Ou seja repita a execução do código quantas vezes for possível definido pelo usuário.
A sintaxe é:
for var in 1 2 3 4 5 N
do
command1
command2
done
O loop for abaixo itera de 1 a 10 e processa seus valores na tela.
A melhor maneira de conseguir isso é definir um intervalo usando chaves duplas { }
conforme mostrado, em vez de digitar todos os números.
#!/bin/bash
Specify range in a for loop
for num in {1..10}
do
echo $num
done
Parâmetros posicionais do Bash
Um parâmetro posicional é uma variável especial referenciada no script quando valores são passados no shell, mas não podem ser atribuídos. Os parâmetros posicionais vão de $0 $1 $2 $3 …… a $9. Além do valor $9, os parâmetros devem ser colocados entre chaves, por exemplo, $ {10}, $ {11}… e assim por diante.
Ao executar o script, o primeiro parâmetro posicional que é $0 leva o nome do shell script. O parâmetro $1 pega a primeira variável que é passada no terminal, $2 pega a segunda, $3 a terceira e assim por diante.
Vamos criar um script test.sh conforme mostrado.
#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2
Em seguida, execute o script e forneça o primeiro e o segundo nome como argumentos:
bash test.sh James Kiarie
Na saída, podemos ver que a primeira variável impressa é o nome do shell script, neste caso, test.sh. Depois disso, os nomes são impressos correspondendo aos parâmetros posicionais definidos no shell script.
Os parâmetros posicionais são úteis porque ajudam a personalizar os dados que estão sendo inseridos, em vez de atribuir explicitamente um valor a uma variável.
Códigos de saída de comando Shell
Vamos começar respondendo a uma pergunta simples: O que é um código de saída?
Cada comando executado no shell por um usuário ou script de shell possui um status de saída. Um status de saída é um número inteiro.
Um status de saída 0 implica que o comando foi executado com sucesso e sem erros. Qualquer valor entre 1 a 255 mostra que o comando falhou ou não foi executado com êxito.
Para encontrar o status de saída de um comando, use a variável Shell $?
.
Um status de saída 1 indica um erro geral ou qualquer erro inadmissível, como edição de arquivos sem permissões sudo.
Um status de saída de 2 aponta para o uso incorreto de um comando ou variável interna do shell.
O status de saída 127 aponta para um comando ilegal que geralmente gera o erro ‘comando não encontrado’.
Processando saída de comandos Shell em um script
No script bash, você pode armazenar a saída de um comando em uma variável para uso futuro. Isso também é conhecido como substituição de comando shell e pode ser alcançado das seguintes maneiras.
variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)
Por exemplo, você pode armazenar o comando data em uma variável chamada hoje e chamar o script de shell para revelar a data atual.
#!/bin/bash
today=$(date)
echo “Today is $today”
Vejamos outro exemplo. Suponha que você queira encontrar os usuários de login válidos em seu sistema Linux. Como você faria isso? Primeiro, a lista de todos os usuários (usuários do sistema, do processo e de login) é armazenada no arquivo /etc/passwd.
Para visualizar o arquivo, você precisa usar o comando cat. No entanto, para restringir o login de usuários, use o comando grep para procurar usuários com o atributo /bin/bash e use o comando cut -c 1-10 como mostrado para exibir os primeiros 10 caracteres dos nomes.
Armazenamos o comando cat na variável login_users.
#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users
Isso encerra nosso tutorial sobre como criar scripts de shell simples. Esperamos que você tenha achado isso valioso.