40 Exemplos simples mas eficazes de scripts de shell Linux

Histórico, a shell tem sido o interpretador de linha de comando nativo para sistemas do tipo Unix. Ele provou ser uma das principais características do Unix ao longo dos anos e cresceu para um tópico totalmente novo em si. O Linux oferece uma variedade de poderosos shells com funcionalidades robustas, incluindo Bash, Zsh, Tcsh, e Ksh. Uma das características mais surpreendentes destes shells é a sua programabilidade. Criar scripts shell simples mas eficazes para lidar com as tarefas do dia-a-dia é bastante fácil. Além disso, um conhecimento modesto sobre este tópico fará de você um usuário de poder do Linux em pouco tempo. Fique connosco para uma introdução detalhada à shell scripting Unix.

Linux Shell Script Exemplos

A maioria dos scripts de shell feitos no Linux envolvem a shell bash. Usuários poderosos que especificaram escolhas, freqüentemente usam outros shells como Zsh e Ksh. Nós vamos nos ater aos scripts bash do Linux em nossos exemplos devido a sua grande popularidade e imensa usabilidade. Nossos editores também tentaram delinear alguns exemplos de scripts shell que lidam com shells que não sejam bash. Você encontrará uma quantidade substancial de familiaridade entre diferentes scripts shell.

Linux Bash Scripts

Bash aka o Bourne Again Shell é o interpretador de linha de comando padrão na maioria das distros Linux atualmente. É uma actualização da anterior shell de Bourne que foi introduzida pela primeira vez na Versão 7 Unix. A aprendizagem de bash shell scripting irá permitir-lhe compreender outros shell scripts muito mais rapidamente. Então, tente você mesmo estes exemplos simples para ganhar experiência em primeira mão.

1. Olá Mundo

Programadores frequentemente aprendem novas linguagens através da aprendizagem do programa olá mundo. É um programa simples que imprime a string “Hello World” para a saída padrão. Use um editor como vim ou nano para criar o arquivo hello-world.sh e copie as linhas abaixo nele.

#!/bin/bashecho "Hello World"

Salve e saia do arquivo. Você precisa tornar este ficheiro executável usando o comando abaixo.

$ chmod a+x hello-world.sh

Você pode executar isto usando qualquer um dos dois comandos abaixo.

$ bash hello-world.sh$ ./hello-world.sh

Imprimirá a string passada para eco dentro do script.

2. Usando echo para Imprimir

O comando echo é usado para imprimir informação no bash. É similar à função C ‘printf’ e fornece muitas opções comuns, incluindo seqüências de escape e redirecionamento.

Copiar as linhas abaixo em um arquivo chamado echo.sh e torná-lo executável como feito acima.

#!/bin/bashecho "Printing text"echo -n "Printing text without newline"echo -e "\nRemoving \t special \t characters\n"

Executar o script para ver o que ele faz. A opção -e é usada para dizer ao echo que a string passada a ele contém caracteres especiais e requer funcionalidade extendida.

3. Usando Comentários

Comentários são úteis para documentação e são um requisito para bases de código de alta qualidade. É uma prática comum colocar comentários dentro de códigos que lidam com lógica crítica. Para comentar uma linha, basta usar o caracter #(hash) antes dela. Verifique o exemplo de script bash abaixo.

#!/bin/bash# Adding two values((sum=25+35))#Print the resultecho $sum

Este script irá emitir o número 60. Verifique como os comentários são usados usando o # antes de algumas linhas. A primeira linha é uma exceção, no entanto. É chamada de shebang e permite ao sistema saber qual interpretador usar ao rodar este script.

4. Multi-line comments

Muitas pessoas usam comentários multi-linhas para documentar seus scripts shell. Verifique como isto é feito no próximo script chamado comment.sh.

#!/bin/bash: 'This script calculatesthe square of 5.'((area=5*5))echo $area

Note como comentários multi-linhas são colocados dentro de :’ e ‘ caracteres.

5. A construção de loop while

A construção de loop while é usada para executar algumas instruções várias vezes. Veja o seguinte script chamado while.sh para uma melhor compreensão deste conceito.

#!/bin/bashi=0while doecho Number: $i((i++))done

Então, o loop while toma a forma abaixo.

while docommands 1commands ndone

O espaço ao redor dos colchetes é obrigatório.

6. O For Loop

O for loop é outra construção de shell bash amplamente utilizada que permite aos usuários iterar sobre códigos de forma eficiente. Um exemplo simples é demonstrado abaixo.

#!/bin/bashfor (( counter=1; counter<=10; counter++ ))doecho -n "$counter "doneprintf "\n"

Salve este código em um arquivo chamado for.sh e execute-o usando ./for.sh. Não se esqueça de torná-lo executável. Este programa deve imprimir os números de 1 a 10.

7. Receber Input do Utilizador

Obter input do utilizador é crucial para implementar a interacção do utilizador nos seus scripts. O exemplo de script shell abaixo irá demonstrar como receber a entrada do usuário dentro de um programa shell.

#!/bin/bashecho -n "Enter Something:"read somethingecho "You Entered: $something"

Então, a construção lida seguida por um nome de variável, é usada para obter a entrada do usuário. O input é armazenado dentro desta variável e pode ser acessado usando o sinal $.

8. As instruções If Statement

Se as instruções são a construção condicional mais comum disponível no script de shell Unix, elas tomam a forma mostrada abaixo.

if CONDITION thenSTATEMENTSfi

As instruções só são executadas dada a CONDIÇÃO ser verdadeira. A palavra-chave fi é usada para marcar o fim da instrução if. Um exemplo rápido é mostrado abaixo.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."fi

O programa acima só mostrará a saída se o número fornecido via input for maior que dez. O -gt significa maior que; similarmente -lt significa menor que; -le significa menor que igual; e -ge significa maior que igual. As ] são necessárias.

9. More Control Using If Else

Combinando a outra construção com if permite um controle muito melhor sobre a lógica do seu script. Um exemplo simples é mostrado abaixo.

#!/bin/bashread nif ;thenecho "It is a one digit number"elseecho "It is a two digit number"fi

A outra parte precisa ser colocada após a parte da ação do if e antes do fi.

10. Usando o operador AND

O operador AND permite que nosso programa verifique se várias condições são satisfeitas de uma só vez ou não. Todas as peças separadas por um operador AND devem ser verdadeiras. Caso contrário, a declaração contendo o “E” retornará falsa. Verifique o seguinte exemplo de script bash para uma melhor compreensão de como AND funciona.

#!/bin/bashecho -n "Enter Number:"read numif ]; thenecho "Even Number"elseecho "Odd Number"fi

O operador AND é indicado pelo sinal &&.

11. Usando o operador OR

O operador OR é outra construção crucial que nos permite implementar uma lógica de programação complexa e robusta em nossos scripts. Ao contrário do AND, uma afirmação que consiste no operador OR retorna verdadeiro quando um dos seus operandos é verdadeiro. Ele retorna falso somente quando cada operando separado pelo OR é falso.

#!/bin/bashecho -n "Enter any number:"read nif ]thenecho "You won"elseecho "You lost!"fi

Este exemplo simples demonstra como o operador OR funciona em scripts shell Linux. Ele declara o usuário como o vencedor somente quando ele entra com o número 15 ou 45. O sinal || representa o operador OR.

12. Usando Elif

A declaração elif representa outro se e oferece um meio conveniente para implementar a lógica em cadeia. Descubra como elif funciona avaliando o seguinte exemplo.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."elif ]thenecho "Number is equal to 10."elseecho "Number is less than 10."fi

O programa acima é auto-explicativo, assim não o dissecaremos linha por linha. Mude partes do script como nomes de variáveis e valores para verificar como elas funcionam juntas.

13. O Switch Construct

A construção do switch é outro recurso poderoso oferecido pelos scripts bash do Linux. Ele pode ser usado onde condições aninhadas são necessárias, mas você não quer usar cadeias if-else-elif complexas. Dê uma olhada no próximo exemplo.

#!/bin/bashecho -n "Enter a number: "read numcase $num in100)echo "Hundred!!" ;;200)echo "Double Hundred!!" ;;*)echo "Neither 100 nor 200" ;;esac

As condições são escritas entre as palavras-chave case e esac. O *) é usado para combinar todas as entradas, exceto 100 e 200.

14. Argumentos da linha de comando

A obtenção de argumentos diretamente da shell de comando pode ser benéfica em vários casos. O exemplo abaixo demonstra como fazer isto em bash.

#!/bin/bashecho "Total arguments : $#"echo "First Argument = "echo "Second Argument = "

Executar este script com dois parâmetros adicionais após o seu nome. Eu o nomeei test.sh e o procedimento de chamada está descrito abaixo.

$ ./test.sh Hey Howdy

Então, $1 é usado para acessar o primeiro argumento, $2 para o segundo, e assim por diante. O $# é usado para obter o número total de argumentos.

15. Obtendo Argumentos com Nomes

O exemplo abaixo mostra como obter argumentos de linha de comando com seus nomes.

#!/bin/bashfor arg in "$@"doindex=$(echo $arg | cut -f1 -d=)val=$(echo $arg | cut -f2 -d=)case $index inX) x=$val;;Y) y=$val;;*)esacdone((result=x+y))echo "X+Y=$result"

Nomear este script test.sh e chamá-lo como mostrado abaixo.

$ ./test.sh X=44 Y=100

Deve retornar X+Y=144. Os argumentos aqui são armazenados dentro de ‘$@’ e o script vai buscá-los usando o comando de corte do Linux.

16. Concatating Strings

O processamento de strings é de extrema importância para uma ampla gama de scripts bash modernos. Felizmente, é muito mais confortável no bash e permite uma forma muito mais precisa e concisa de implementar isto. Veja o exemplo abaixo para uma rápida olhada na concatenação de strings bash.

#!/bin/bashstring1="Ubuntu"string2="Pit"string=$string1$string2echo "$string is a great resource for Linux beginners."

O programa seguinte produz a string “UbuntuPit é um grande recurso para iniciantes no Linux” para a tela.

17. Slicing Strings

Contrário para muitas linguagens de programação, o bash não fornece nenhuma função embutida para cortar partes de uma string. O exemplo abaixo demonstra como isto pode ser feito usando expansão de parâmetros.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"subStr=${Str:0:20}echo $subStr

Este script deve imprimir “Learn Bash Commands” como sua saída. A expansão de parâmetros toma a forma ${VAR_NAME:S:L}. Aqui, S denota a posição inicial e L indica o comprimento.

18. Extraindo Substrings Usando Cut

O comando cut do Linux pode ser usado de dentro de seus scripts para ‘cortar’ uma parte de uma string, também conhecido como substring. O próximo exemplo mostra como isto pode ser feito.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"#subStr=${Str:0:20}subStr=$(echo $Str| cut -d ' ' -f 1-3)echo $subStr

Cheque este guia para entender como o comando Linux Cut funciona.

19. Adicionando dois valores

É bastante fácil executar operações aritméticas dentro de scripts shell do Linux. O exemplo abaixo demonstra como receber dois números como entrada do usuário e adicioná-los.

#!/bin/bashecho -n "Enter first number:"read xecho -n "Enter second number:"read y(( sum=x+y ))echo "The result of addition=$sum"

Como você pode ver, adicionar números no bash é razoavelmente simples.

20. Adicionando múltiplos valores

Você pode usar loops para obter múltiplos dados do usuário e adicioná-los dentro do seu script. Os exemplos seguintes mostram isso em action.

#!/bin/bashsum=0for (( counter=1; counter<5; counter++ ))doecho -n "Enter Your Number:"read n(( sum+=n ))#echo -n "$counter "doneprintf "\n"echo "Result is: $sum"

No entanto, omitir o (( )) resultará em concatenação de strings ao invés de adição. Então, verifique coisas como esta no seu programa.

21. Funções no Bash

Como em qualquer dialecto de programação, as funções desempenham um papel essencial nos scripts shell do Linux. Elas permitem que os administradores criem blocos de código personalizados para uso frequente. A demonstração abaixo irá delinear como funcionam as funções em scripts bash Linux.

#!/bin/bashfunction Add(){echo -n "Enter a Number: "read xecho -n "Enter another Number: "read yecho "Adiition is: $(( x+y ))"}Add

Aqui adicionamos dois números tal como antes. Mas aqui nós fizemos o trabalho usando uma função chamada Add. Então sempre que precisar de adicionar novamente, pode simplesmente chamar esta função em vez de escrever aquela secção novamente.

22. Funções com valores de retorno

Uma das características mais fantásticas das funções é que elas permitem a passagem de dados de uma função para outra. É útil em uma grande variedade de cenários. Veja o próximo exemplo.

#!/bin/bashfunction Greet() {str="Hello $name, what brings you to UbuntuPit.com?"echo $str}echo "-> what's your name?"read nameval=$(Greet)echo -e "-> $val"

Aqui, a saída contém dados recebidos da função Greet().

23. Criando Diretórios a partir de Bash Scripts

A capacidade de executar comandos do sistema usando scripts shell permite que os desenvolvedores sejam muito mais produtivos. O seguinte exemplo simples irá mostrar-lhe como criar um directório a partir de um script shell.

#!/bin/bashecho -n "Enter directory name ->"read newdircmd="mkdir $newdir"eval $cmd

Se olhar com atenção, este script simplesmente chama o seu comando shell padrão mkdir e passa-lhe o nome do directório. Este programa deve criar um directório no seu sistema de ficheiros. Você também pode passar o comando para executar dentro de backticks(“) como mostrado abaixo.

`mkdir $newdir`

24. Crie um diretório após confirmar a existência

O programa acima não funcionará se o seu diretório de trabalho atual já contiver uma pasta com o mesmo nome. O programa abaixo irá verificar a existência de qualquer pasta chamada $dir e somente criará uma se não encontrar nenhuma.

#!/bin/bashecho -n "Enter directory name ->"read dirif thenecho "Directory exists"else`mkdir $dir`echo "Directory created"fi

Escreva este programa usando eval para aumentar suas habilidades de bash scripting.

25. Lendo Arquivos

Bash scripts permitem aos usuários ler arquivos de forma muito eficaz. O exemplo abaixo mostrará como ler um arquivo usando scripts shell. Crie um arquivo chamado editors.txt com o seguinte conteúdo.

1. Vim 2. Emacs 3. ed 4. nano 5. Code

Este script irá sair cada uma das 5 linhas acima.

#!/bin/bashfile='editors.txt'while read line; doecho $linedone < $file

26. Excluindo Arquivos

O programa a seguir irá demonstrar como excluir um arquivo dentro dos scripts shell do Linux. O programa irá primeiro pedir ao usuário para fornecer o nome do arquivo como entrada e irá apagá-lo se ele existir. O comando rm do Linux faz a exclusão aqui.

#!/bin/bashecho -n "Enter filename ->"read namerm -i $name

Digite em editors.txt o nome do arquivo e pressione y quando solicitado para confirmação. Ele deve apagar o arquivo.

27. Anexando a Files

O exemplo de shell script abaixo irá mostrar-lhe como anexar dados a um ficheiro no seu sistema de ficheiros usando bash scripts. Ele adiciona uma linha adicional ao anterior arquivo editors.txt.

#!/bin/bashecho "Before appending the file"cat editors.txtecho "6. NotePad++" >> editors.txtecho "After appending the file"cat editors.txt

Você já deve ter notado que estamos usando comandos de terminal diários diretamente dos scripts bash do Linux.

28. Test File Existence

O próximo exemplo de script shell mostra como verificar a existência de um arquivo de programas bash.

#!/bin/bashfilename=if ; thenecho "File exists"elseecho "File does not exist"fi

Estamos passando o nome do arquivo como argumento da linha de comando diretamente.

29. Enviar e-mails a partir de Shell Scripts

É bastante simples enviar e-mails a partir de bash scripts. O exemplo simples a seguir irá demonstrar uma maneira de fazer isso a partir de aplicações bash.

#!/bin/bashrecipient="[email protected]"subject="Greetings"message="Welcome to UbuntuPit"`mail -s $subject $recipient <<< $message`

Irão enviar um e-mail para o destinatário contendo o assunto e a mensagem.

30. Parsing Date and Time

O próximo exemplo de script bash mostrará como lidar com datas e horas usando scripts. O comando de data do Linux é usado para obter as informações necessárias, e nosso programa faz o parsing.

#!/bin/bashyear=`date +%Y`month=`date +%m`day=`date +%d`hour=`date +%H`minute=`date +%M`second=`date +%S`echo `date`echo "Current Date is: $day-$month-$year"echo "Current Time is: $hour:$minute:$second"

Executar este programa para ver como ele funciona. Tente também executar o comando de data a partir do seu terminal.

31. O comando Sleep

O comando sleep permite que o seu script de shell faça uma pausa entre as instruções. Ele é útil em vários cenários, como executar tarefas a nível de sistema. O próximo exemplo mostra o comando sleep em ação de dentro de um script shell.

#!/bin/bashecho "How long to wait?"read timesleep $timeecho "Waited for $time seconds!"

Este programa pausa a execução da última instrução até $time segundos, que é fornecido pelo usuário neste caso.

32. O comando Wait Command

O comando Wait é usado para pausar os processos do sistema a partir de scripts bash do Linux. Veja o seguinte exemplo para um entendimento detalhado de como isto funciona no bash.

#!/bin/bashecho "Testing wait command"sleep 5 &pid=$!kill $pidwait $pidecho $pid was terminated.

Execute você mesmo este programa para verificar como ele funciona.

33. Exibindo o último arquivo atualizado

Por vezes você pode precisar encontrar o último arquivo atualizado para certas operações. O seguinte programa simples mostra-nos como fazer isto em bash usando o comando awk. Ele irá listar o último arquivo atualizado ou criado no seu diretório de trabalho atual.

#!/bin/bashls -lrt | grep ^- | awk 'END{print $NF}'

Por uma questão de simplicidade, vamos evitar descrever o quão awk funciona neste exemplo. Você pode simplesmente copiar este código para fazer a tarefa.

34. Adicionando Extensões de Lote

O exemplo abaixo aplicará uma extensão personalizada a todos os arquivos dentro de um diretório. Crie um novo diretório e coloque alguns arquivos lá para fins de demonstração. Minha pasta tem um total de cinco arquivos, cada um nomeado teste seguido por (0-4). Eu programei este script para adicionar (.UP) no final dos arquivos. Você pode adicionar qualquer extensão que quiser.

#!/bin/bashdir=for file in `ls /*`domv $file $file.UPdone

Primeiro, não tente este script a partir de qualquer diretório normal; em vez disso, execute-o a partir de um diretório de teste. Além disso, você precisa fornecer o nome do diretório de seus arquivos como um argumento de linha de comando. Use period(.) para o diretório de trabalho atual.

35. Print Number of Files or Directories

O script bash do Linux abaixo encontra o número de arquivos ou pastas presentes dentro de um determinado diretório. Ele utiliza o comando find do Linux para fazer isso. Você precisa passar o nome do diretório onde você quer procurar por arquivos da linha de comando.

#!/bin/bashif ; thenecho "Files found: $(find "$@" -type f | wc -l)"echo "Folders found: $(find "$@" -type d | wc -l)"elseecho " Please retry with another folder."exit 1fi

O programa irá pedir ao usuário para tentar novamente se o diretório especificado não estiver disponível ou tiver problemas de permissão.

36. Limpando Arquivos de Log

O próximo exemplo simples demonstra uma maneira prática de usar scripts shell na vida real. Este programa irá simplesmente apagar todos os arquivos de log presentes dentro do seu diretório /var/log. Você pode alterar a variável que contém este diretório para limpar outros logs.

#!/bin/bashLOG_DIR=/var/logcd $LOG_DIRcat /dev/null > messagescat /dev/null > wtmpecho "Logs cleaned up."

Remember para executar este script shell Linux como root.

37. Script de backup usando Bash

Shell scripts fornecem uma maneira robusta de fazer o backup de seus arquivos e diretórios. O exemplo seguinte irá fazer o backup de cada ficheiro ou directório que foram modificados nas últimas 24 horas. Este programa utiliza o comando find para fazer isto.

#!/bin/bashBACKUPFILE=backup-$(date +%m-%d-%Y)archive=${1:-$BACKUPFILE}find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."exit 0

Imprime os nomes dos arquivos e diretórios após o processo de backup ser bem sucedido.

38. Verifique se você é root

O exemplo abaixo demonstra uma maneira rápida de descobrir se um usuário é root ou não dos scripts bash do Linux.

#!/bin/bashROOT_UID=0if thenecho "You are root."elseecho "You are not root"fiexit 0

A saída deste script depende do usuário que o executa. Ele irá corresponder ao usuário root baseado no $UID.

39. Removendo Linhas Duplicadas de Arquivos

O processamento de arquivos leva um tempo considerável e dificulta a produtividade dos administradores de várias maneiras. Procurar por duplicatas em seus arquivos pode se tornar uma tarefa assustadora. Felizmente, você pode fazer isso com um pequeno script shell.

#! /bin/shecho -n "Enter Filename-> "read filenameif ; thensort $filename | uniq | tee sorted.txtelseecho "No $filename in $pwd...try again"fiexit 0

O script acima vai linha por linha através do seu arquivo e remove qualquer linha duplicada. Ele então coloca o novo conteúdo em um novo arquivo e mantém o arquivo original intacto.

40. Manutenção do Sistema

Eu frequentemente uso um pequeno script de shell Linux para actualizar o meu sistema em vez de o fazer manualmente. O script shell simples abaixo mostrará como fazer isto.

#!/bin/bashecho -e "\n$(date "+%d-%m-%Y --- %T") --- Starting work\n"apt-get updateapt-get -y upgradeapt-get -y autoremoveapt-get autocleanecho -e "\n$(date "+%T") \t Script Terminated"

O script também cuida de pacotes antigos que não são mais necessários. Você precisa executar este script usando o sudo ou ele não funcionará corretamente.

Ending Thoughts

Linux shell scripts podem ser tão diversos quanto você pode imaginar. Não há literalmente nenhum limite quando se trata de determinar o que ele pode ou não pode fazer. Se você é um novo entusiasta do Linux, nós recomendamos fortemente que você domine estes exemplos fundamentais de bash scripts. Você deve ajustá-los para entender como eles funcionam mais claramente. Nós tentamos o nosso melhor para lhe fornecer todos os conhecimentos essenciais necessários para os modernos scripts de bash Linux. Nós não tocamos em alguns assuntos técnicos por causa da simplicidade. No entanto, este guia deve ser um ótimo ponto de partida para muitos de vocês.

Deixe uma resposta

O seu endereço de email não será publicado.