pt.phhsnews.com


pt.phhsnews.com / O Guia do Iniciante para Shell Scripting: O Básico

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


O termo “shell scriptting” é mencionado frequentemente em fóruns Linux, mas muitos usuários não estão familiarizados com ele. Aprender este 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 é o Shell Scripting?

Ser um usuário do Linux significa brincar com o comando. linha. Goste ou não, há apenas algumas coisas que são feitas muito mais facilmente através desta interface do que apontando e clicando. 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. Atualmente, a maioria das distribuições Linux usa o Bash, e é nele que você está inserindo os comandos.

Agora, alguns de vocês que usaram o Windows antes de usar o Linux podem lembrar de arquivos em lote. Estes 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 do ensino médio quando você não conseguia abrir pastas do sistema ou criar atalhos. 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 cadeias e fazer com que o sistema os execute como um evento com 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 date, e usá-lo como parte de um esquema de nomenclatura de arquivos. Você pode automatizar backups e cada arquivo copiado pode ter a data atual anexada ao final de seu nome. Scripts não são apenas invocações de comandos. Eles são programas por direito próprio. Scripts permitem usar funções de programação - como 'for' loops, 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á sabe: a linha de comando.

Esse é realmente o poder do script, eu acho. Você pode programar com comandos que você já conhece, enquanto aprende os grampos da maioria das linguagens de programação. Precisa fazer algo repetitivo e tedioso? Script isso! Precisa de um atalho para um comando realmente complicado? Script isso! Quer construir um realmente fácil de usar interface de linha de comando para algo? Script it!

Antes de começar

Antes de começarmos nossa série de scripts, vamos abordar algumas informações básicas. Nós 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 o Cygwin no Windows também. Como é tão universal, você deve ser capaz de criar scripts independentemente da sua plataforma. Além disso, desde que todos os comandos mencionados existam, os scripts podem funcionar em várias plataformas com pouco ou nenhum ajuste necessário.

O script pode facilmente usar privilégios de “administrador” ou “superusuário”, portanto, é melhor teste os scripts antes de colocá-los para trabalhar. Use também o bom senso, como garantir que você tenha backups dos arquivos nos quais você está prestes a executar um script. Também é muito importante usar as opções corretas, como -i para o comando rm, para que sua interação seja necessária. Isso pode evitar alguns erros desagradáveis. Dessa forma, leia os scripts que você baixou e tenha cuidado com os dados que você possui, apenas no caso de as coisas darem 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. Desde que eu amo a facilidade de uso que nano fornece, eu vou estar usando isso

Permissões de script e nomes

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 / script1

Isso permitirá que qualquer pessoa execute esse script em particular. Se você quiser restringir seu uso apenas ao seu usuário, você pode usar isto:

chmod u + x ~ / somecrazyfolder / script1

Para executar esse script, você teria que fazer o cd no diretório correto e, em seguida, executar o script da seguinte forma:

cd ~ / somecrazyfolder

./ script1

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

~ / bin

Em muitas distribuições modernas, essa pasta não é mais criada por padrão, mas você pode criar isto. Geralmente, é onde os arquivos executáveis ​​são armazenados, que pertencem ao seu usuário e não a outros usuários. Colocando scripts aqui, você pode simplesmente executá-los digitando o nome deles, assim como outros comandos, em vez de ter que usar cd e usar o prefixo './'.

Antes de nomear um script, você deve: comando para verificar se você tem um programa instalado que usa esse nome:

which [command]

Muitas pessoas nomeiam seus primeiros scripts como “test” e quando tentam executá-lo na linha de comando, nada acontece. Isso ocorre porque está em conflito com o comando test, que não faz nada sem argumentos. Sempre certifique-se de que seus nomes de script não entrem em conflito com comandos, caso contrário, você pode se encontrar fazendo coisas que não pretende fazer!

Diretrizes de Scripts

Como mencionei antes, todo arquivo de script é essencialmente texto simples. Isso não significa que você pode escrever o que você quer, quer queira quer não. Quando um arquivo de texto é tentado a ser executado, os shells irão analisá-los em busca de pistas sobre se eles são scripts ou não, e como lidar com tudo corretamente. Devido a isso, existem algumas diretrizes que você precisa saber.

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

O corte Hash-Bang

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

# ! / bin / bash

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

Nova Linha = Novo Comando

Toda nova linha deve ser considerada um novo comando ou um componente de um sistema maior. Se / then / else instruções, por exemplo, assumirá várias linhas, mas cada componente desse sistema está em uma nova linha. Não deixe que um comando passe 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 de texto para estar no lado seguro. Você pode desativar o quebra automática de texto em nano bits pressionando ALT + L.

Comentário Frequentemente com #s

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

são cercados por parênteses

Em dias mais antigos, as substituições de comandos eram feitas com marcas de escala única (', compartilha a tecla ~). Ainda não vamos tocar nisso, mas como a maioria das pessoas explora depois de aprender o básico, provavelmente é uma boa ideia mencionar que você deve usar parênteses. Isto é principalmente porque quando você aninhar - colocar comandos dentro de outros comandos - 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 esse nome.

Vamos criar um arquivo em branco no ~ Pasta / bin:

touch ~ / bin / datecp

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

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

nano ~ / bin / datecp

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

Em seguida, vamos declarar uma variável. Se você já tomou á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 exibir seu nome, eles exibirão seus conteúdos armazenados. Mais tarde, você pode informar essa mesma variável para armazenar informações diferentes e qualquer instrução que ocorrer depois disso usará as novas informações. É realmente um espaço reservado de fantasia.

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

Dê uma olhada na imagem abaixo para saber como criar a saída do comando date:

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

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

Se salvarmos este script agora, poderíamos executá-lo e 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 apropriada para isso é a seguinte:

variable = $ (command -options arguments)

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

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

Isso é o que chamamos de substituição de comando. Basicamente, estamos dizendo que sempre que a variável “date_formatted” aparecer, execute o comando dentro dos parênteses. Então, qualquer saída que os comandos forneçam deve ser exibida em vez do nome da variável, “date_formatted”.

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

Observe que há dois espaços na saída. O espaço entre 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 essa linha de "eco" adicionada, o script não daria absolutamente nenhuma saída.

Vamos voltar ao nosso script. Vamos em seguida adicionar a parte de cópia do comando.

cp -iv $ 1 $ 2. $ date_formatted

Isto irá invocar o comando copy, com as opções -i e -v. O primeiro pedirá a verificação antes de sobrescrever um arquivo, e o segundo exibirá o que está sendo desativado na linha de comando.

Em seguida, você pode ver que eu adicionei a opção "$ 1". Quando o script, um sinal de dólar ($) seguido por um número irá denotar esse 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 o nosso script, podemos ver que estamos fazendo referência a dois argumentos:

Isso significa que, quando executarmos o script, precisaremos fornecer dois argumentos para o script ser executado corretamente. O primeiro argumento, $ 1, é o arquivo que será copiado e é substituído pelo 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 período e fizemos referência à variável "date_formatted" acima. Curioso para saber o que isso faz?

Veja o que acontece quando o script é executado:

Você pode ver que o arquivo de saída está listado como o que eu digitei por $ 2, seguido por um período e depois pela saída do comando date ! Faz sentido, né?

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


O script do shell está no centro de fazer seu sistema operacional funcionar para você. Você não precisa aprender uma nova linguagem de programação para fazer isso acontecer. Tente criar scripts com alguns comandos básicos em casa e comece a pensar no que você pode usar para isso.

Você faz script? Tem algum conselho para iniciantes? Compartilhe seus pensamentos nos comentários! Há mais para vir nesta série!


Aspiradores de robô não são tão convenientes quanto parecem (ou porque eu retornei ao meu Roomba)

Aspiradores de robô não são tão convenientes quanto parecem (ou porque eu retornei ao meu Roomba)

Parecem ótimos. Eles fazem o aspirador para você, economizando tempo e aborrecimento. E eles também baixaram o preço - você pode conseguir um Roomba decente por pouco mais de 300 dólares. Mas enquanto muitas pessoas parecem felizes com seus Roombas, eu decidi devolver o meu. Aspirar ainda não é divertido, mas um sólido aspirador sem fio é mais útil para mim do que um robô enigmático.

(how-to)

Como usar o OpenDNS no seu roteador, PC, tablet ou smartphone

Como usar o OpenDNS no seu roteador, PC, tablet ou smartphone

A maioria das redes domésticas raramente tem um único tipo de cliente conectando-se a ele. Normalmente, há uma mistura de Windows, Android, iOS e talvez até mesmo Macs. Como você mantém todos esses clientes conectados enquanto mantém os usuários mais jovens longe de problemas? Falamos sobre o OpenDNS em artigos anteriores e, recentemente, discutimos as possibilidades de usar seu roteador para controles básicos dos pais.

(how-to)