O Guia do Iniciante em Shell Scripting: O Básico

O termo "script de shell" é mencionado com frequência em fóruns do Linux, mas muitos usuários não estão familiarizados com ele. Aprender esse método de programação fácil e poderoso pode ajudá-lo a economizar tempo, aprender melhor a linha de comando e banir as tediosas tarefas de gerenciamento de arquivos.

O que é script de shell?

Ser um usuário Linux significa brincar com a linha de comando. Goste ou não, há apenas algumas coisas que são feitas muito mais facilmente por meio dessa interface do que apontar e clicar. Quanto mais você usa e aprende a linha de comando, mais você vê seu potencial. Bem, a linha de comando em si é um programa: o shell. A maioria das distros Linux hoje usa Bash, e é nisso que você está realmente digitando comandos.

Agora, alguns de vocês que usaram o Windows antes de usar o Linux podem se lembrar dos arquivos em lote. Esses eram pequenos arquivos de texto que você poderia preencher com comandos para executar e o Windows os executaria por sua vez. Era uma maneira inteligente e organizada de fazer algumas coisas, como rodar jogos no laboratório de informática da escola quando você não conseguia abrir as pastas do sistema ou criar atalhos. Os arquivos em lote no Windows, embora úteis, são uma imitação barata de scripts de shell.

Os scripts de shell nos permitem programar comandos em cadeia e fazer com que o sistema os execute como um evento de script, assim como os arquivos em lote. Eles também permitem funções muito mais úteis, como a substituição de comandos. Você pode invocar um comando, como data, e usar sua saída como parte de um esquema de nomenclatura de arquivo. Você pode automatizar backups e cada arquivo copiado pode ter a data atual anexada ao final de seu nome. Os scripts também não são apenas invocações de comandos. Eles são programas em seu próprio direito. O script permite que você use funções de programação - como loops ‘for’, instruções if / then / else e assim por diante - diretamente na interface do seu sistema operacional. E você não precisa aprender outro idioma porque está usando o que já conhece: a linha de comando.

Esse é realmente o poder do script, eu acho. Você começa a programar com comandos que já conhece, enquanto aprende os princípios básicos da maioria das principais linguagens de programação. Precisa fazer algo repetitivo e tedioso? Faça o script! Precisa de um atalho para um comando realmente complicado? Faça o script! Quer construir uma interface de linha de comando realmente fácil de usar para alguma coisa? Faça o script!

Antes de você começar

Antes de começar nossa série de scripts, vamos cobrir algumas informações básicas. Estaremos usando o shell bash, que a maioria das distribuições Linux usa nativamente. O Bash está disponível para usuários do Mac OS e Cygwin no Windows também. Por ser tão universal, você deve ser capaz de criar scripts independentemente de sua plataforma. Além disso, desde que todos os comandos referenciados existam, os scripts podem funcionar em várias plataformas com poucos ou nenhum ajuste necessário.

Os scripts podem usar facilmente os privilégios de "administrador" ou "superusuário", então é melhor testar os scripts antes de colocá-los para funcionar. Use também o bom senso, como garantir que você tenha backups dos arquivos nos quais está prestes a executar um script. Também é muito importante usar as opções certas, como –i para o comando rm, para que sua interação seja necessária. Isso pode evitar alguns erros desagradáveis. Como tal, leia os scripts que você baixa e tome cuidado com os dados que possui, caso algo dê errado.

Em sua essência, os scripts são apenas arquivos de texto simples. Você pode usar qualquer editor de texto para escrevê-los: gedit, emacs, vim, nano ... Esta lista continua. Apenas certifique-se de salvá-lo como texto simples, não como rich text ou como um documento do Word. Já que adoro a facilidade de uso que o nano oferece, irei usá-lo.

Permissões e nomes de script

Os scripts são executados como programas e, para que isso aconteça, eles precisam ter as permissões adequadas. Você pode tornar os scripts executáveis ​​executando o seguinte comando:

chmod + x ~ / somecrazyfolder / script

Isso permitirá que qualquer pessoa execute aquele script específico. Se quiser restringir seu uso apenas ao seu usuário, você pode usar o seguinte:

chmod u + x ~ / somecrazyfolder / script

Para executar este script, você teria que entrar no diretório apropriado e, em seguida, executar o script assim:

cd ~ / somecrazyfolder

./script1

Para tornar as coisas mais convenientes, você pode colocar os scripts em uma pasta “bin” em seu diretório inicial:

~ / bin

Em muitas distros modernas, esta pasta não é mais criada por padrão, mas você pode criá-la. Normalmente é onde os arquivos executáveis ​​são armazenados e pertencem ao seu usuário e não a outros usuários. Ao colocar scripts aqui, você pode simplesmente executá-los digitando seus nomes, assim como outros comandos, em vez de ter que percorrer e usar o prefixo ‘./’.

Antes de nomear um script, no entanto, você deve executar o seguinte comando para verificar se há um programa instalado que usa esse nome:

qual [comando]

Muitas pessoas chamam seus primeiros scripts de “teste” e, quando tentam executá-los na linha de comando, nada acontece. Isso ocorre porque ele entra em conflito com o comando test, que não faz nada sem argumentos. Sempre certifique-se de que os nomes dos scripts não entrem em conflito com os comandos, caso contrário, você pode se pegar fazendo coisas que não pretende fazer!

Diretrizes de script

Como mencionei antes, todo arquivo de script é essencialmente um texto simples. Isso não significa que você pode escrever o que quiser de qualquer jeito. Quando se tenta executar um arquivo de texto, os shells os analisam em busca de pistas sobre se são scripts ou não e como lidar com tudo corretamente. Por causa disso, existem algumas diretrizes que você precisa saber.

  1. Cada script deve estar com “#! / Bin / bash”
  2. Cada nova linha é um novo comando
  3. As linhas de comentário começam com um #
  4. Os comandos são cercados por ()

Hack de Hash-Bang

Quando um shell analisa um arquivo de texto, a maneira mais direta de identificar o arquivo como um script é criando sua primeira linha:

#! / bin / bash

Se você usar outro shell, substitua seu caminho aqui. As linhas de comentário começam com hashes (#), mas adicionar o bang (!) E o caminho do shell depois disso é uma espécie de hack que contornará esta regra de comentário e forçará o script a ser executado com o shell para o qual esta linha aponta.

Nova Linha = Novo Comando

Cada nova linha deve ser considerada um novo comando ou um componente de um sistema maior. As instruções if / then / else, por exemplo, ocuparão várias linhas, mas cada componente desse sistema está em uma nova linha. Não deixe um comando vazar para a próxima linha, pois isso pode truncar o comando anterior e gerar um erro na próxima linha. Se o seu editor de texto estiver fazendo isso, você deve desativar a quebra automática de texto para ficar no lado seguro. Você pode desativar a quebra automática de texto em nano bits pressionando ALT + L.

Comente frequentemente com #s

Se você iniciar uma linha com um #, a linha será ignorada. Isso o transforma em uma linha de comentário, onde você pode se lembrar de qual foi a saída do comando anterior ou o que o próximo comando fará. Novamente, desative a quebra automática de texto ou divida seu comentário em várias linhas, todas começando com um hash. É uma boa prática manter o uso de muitos comentários, pois permite que você e outras pessoas ajustem seus scripts com mais facilidade. A única exceção é o hack Hash-Bang mencionado anteriormente, portanto, não siga #s com! S. ;-)

Os comandos são cercados por parênteses

Antigamente, as substituições de comandos eram feitas com marcas de seleção simples (`, compartilha a tecla ~). Não vamos tocar nisso ainda, mas como a maioria das pessoas sai e explora depois de aprender o básico, é provavelmente uma boa ideia mencionar que você deve usar parênteses. Isso ocorre principalmente porque quando você aninha - coloca comandos dentro de outros comandos - os parênteses funcionam melhor.

Seu Primeiro Script

Vamos começar com um script simples que permite copiar arquivos e acrescentar datas ao final do nome do arquivo. Vamos chamá-lo de “datecp”. Primeiro, vamos verificar se esse nome está em conflito com algo:

Você pode ver que não há saída do comando which, então estamos prontos para usar este nome.

Vamos criar um arquivo em branco na pasta ~ / bin:

toque em ~ / bin / datecp

E, vamos mudar a permissão agora, antes que esqueçamos:

Vamos começar a construir nosso script então. Abra esse arquivo no editor de texto de sua escolha. Como eu disse, gosto da simplicidade do nano.

nano ~ / bin / datecp

E vamos em frente e colocar a primeira linha de pré-requisito e um comentário sobre o que este script faz.

A seguir, vamos declarar uma variável. Se você já estudou álgebra, provavelmente sabe o que é isso. Uma variável nos permite armazenar informações e fazer coisas com elas. Variáveis ​​podem “expandir” quando referenciadas em outro lugar. Ou seja, em vez de exibirem seus nomes, eles exibirão seus conteúdos armazenados. Posteriormente, você pode dizer a essa mesma variável para armazenar informações diferentes, e qualquer instrução que ocorrer depois disso usará as novas informações. É um marcador muito chique.

O que colocaremos em nossa variável? Bem, vamos armazenar a data e a hora! Para fazer isso, vamos chamar o comando date.

Dê uma olhada na captura de tela abaixo para saber como construir a saída do comando date:

Você pode ver que, adicionando diferentes variáveis ​​que começam com%, você pode alterar a saída do comando para o que deseja. Para obter mais informações, você pode consultar a página de manual do comando date.

Vamos usar a última iteração do comando de data, “data +% m_% d_% y-% H.% M.% S”, e usar isso em nosso script.

Se salvássemos este script agora, poderíamos executá-lo e ele nos forneceria a saída do comando date como esperávamos:

Mas vamos fazer algo diferente. Vamos dar um nome de variável, como date_formatted para este comando. A sintaxe adequada para isso é a seguinte:

variável = $ (argumentos de opções de comando)

E para nós, nós o construiríamos assim:

date_formatted = $ (data +% m_% d_% y-% H.% M.% S)

Isso é o que chamamos de substituição de comando. Essencialmente, estamos dizendo ao bash que, sempre que a variável “date_formatted” aparecer, execute o comando entre parênteses. Então, qualquer saída fornecida pelos comandos deve ser exibida em vez do nome da variável, “date_formatted”.

Aqui está um script de exemplo e sua saída:

Observe que existem dois espaços na saída. O espaço entre as aspas do comando echo e o espaço na frente da variável são exibidos. Não use espaços se você não quiser que eles apareçam. Observe também que sem esta linha de “eco” adicionada, o script não geraria absolutamente nenhuma saída.

Vamos voltar ao nosso script. A seguir, vamos adicionar a parte de cópia do comando.

cp –iv $ 1 $ 2. $ date_formatted

Isso invocará o comando copy, com as opções –i e –v. O primeiro irá solicitar uma verificação antes de sobrescrever um arquivo e o último exibirá o que está sendo desativado na linha de comando.

A seguir, você pode ver que adicionei a opção “$ 1”. Ao fazer o script, um cifrão ($) seguido por um número denotará aquele argumento numerado do script quando ele foi chamado. Por exemplo, no seguinte comando:

cp –iv Trogdor2.mp3 ringtone.mp3

O primeiro argumento é “Trogdor2.mp3” e o segundo argumento é “ringtone.mp3”.

Olhando para trás em nosso script, podemos ver que estamos nos referindo a dois argumentos:

Isso significa que, quando executarmos o script, precisaremos fornecer dois argumentos para que o script seja executado corretamente. O primeiro argumento, $ 1, é o arquivo que será copiado e é substituído como o primeiro argumento do comando “cp –iv”.

O segundo argumento, $ 2, atuará como o arquivo de saída para o mesmo comando. Mas, você também pode ver que é diferente. Adicionamos um ponto e referenciamos a variável “date_formatted” acima. Curioso para saber o que isso faz?

Aqui está o que acontece quando o script é executado:

Você pode ver que o arquivo de saída está listado como qualquer coisa que eu inseri por $ 2, seguido por um ponto e depois a saída do comando de data! Faz sentido, certo?

Agora, quando eu executar o comando datecp, ele executará esse script e me permitirá copiar qualquer arquivo para um novo local e adicionar automaticamente a data e a hora ao final do nome do arquivo. Útil para arquivar coisas!

O script Shell está no centro de fazer o seu sistema operacional trabalhar para você. Você também não precisa aprender uma nova linguagem de programação para fazer isso acontecer. Tente fazer scripts com alguns comandos básicos em casa e comece a pensar em como você pode usar isso.

Você faz script? Tem algum conselho para iniciantes? Compartilhe sua opinião nos comentários! Há mais por vir nesta série!


$config[zx-auto] not found$config[zx-overlay] not found