Como eu aprendo scripts de shell bash?

5

Sou um usuário do Mac e um desenvolvedor da Web e gostaria de criar ferramentas automatizadas para gerenciar meu fluxo de trabalho. Diga um único comando para iniciar um tipo de site.

Quais partes do bash shell script devo aprender? Existem tantos:

  • sed
  • awk
  • grep
  • encontre

Ou eu deveria estar aprendendo outra coisa para arquivar a automação de linha de comando em meus projetos da Web?

    
por Amit Erandole 26.11.2011 / 16:56

3 respostas

11

Você precisa estar ciente de que, diferente de outras linguagens de script ou de programação, o shell pesadamente conta com os aplicativos de linha de comando fornecidos pelo sistema operacional. Isso significa que, como o OS X é um BSD, muitas das coisas que funcionam no Linux funcionarão um pouco diferente em seu computador, inutilizando muitos tutoriais. Em geral, você pode esperar que suas ferramentas de linha de comando tenham menos recursos e flexibilidade do que as do Linux, embora haja exceções.

Se você não estiver familiarizado com o shell e não sentir uma grande necessidade de aprendê-lo, talvez seja melhor usar sua linguagem de script da Web favorita (PHP, Ruby, Python) na linha de comando. A vantagem é a API provavelmente mais consistente em toda a biblioteca de funções.

Em bash , aprenda

  • Condições (incluindo o uso de test / [ ... ] para programação defensiva ao manipular arquivos)
  • Loops
  • Atribuição variável
  • Funções
  • Redirecionamento e tubulação de entrada e saída
  • Chamando programas e funções de shell (incluindo como capturar sua saída e ler seus valores de retorno), tanto chamadas regulares quanto com substituição de comandos.
  • Opções. Eu amo set -u e me recuso a trabalhar com scripts que não podem lidar com isso.
  • Tipos de variáveis, matrizes, globbing

O problema aqui é que bash é muito ligado ao sistema com coisas como controle de tarefa e, para criação de scripts complexos, tem uma curva de aprendizado bastante íngreme.

Na minha experiência * nenhuma seção da página bash man é desnecessária. Faz tempo suficiente e tudo lá é aplicável de alguma forma (e se é apenas para responder a perguntas sobre SU).

Alguns (na minha experiência) programas comumente usados em scripts de shell:

  • Manuseio e navegação de arquivos: find , ls , cd , rm , mv , cp , chmod , chown , chflags , dd , ln
  • Execução do programa: xargs , find -exec
  • Transformação de dados: sort , wc , cat , sed , awk , grep

Específicos para o OS X são provavelmente os seguintes:

launchctl , open , dscl , PlistBuddy , plutil , osascript , automator , networksetup , systemsetup , growlnotify (se você tiver Growl)

E, claro, dependendo da natureza exata do que você quer fazer, há outros ...

date (variante BSD - muito diferente do GNU), mount , fsck , kill , sendmail

Alguns, por exemplo netcat exige que você instale pacotes de terceiros, por exemplo usando Homebrew, MacPorts ou Fink.

Se seus scripts usam intensamente esses programas de linha de comando, ou podem ser escritos dessa forma, bash scripts são uma boa maneira de automatizar isso.

Como você está no OS X, procure também no AppleScript (via AppleScript Editor) e no Automator. Ambos podem ser combinados com scripts de shell para obter soluções de script bem integradas. Se você está procurando controlar outros aplicativos do OS X (por exemplo, seu navegador da Web), eles são indispensáveis. Embora você possa abrir URLs em diferentes navegadores usando open na linha de comando, recuperando dados, por exemplo das guias carregadas requer o Automator ou o AppleScript.

Além disso, outras linguagens de script, como ruby , python , também são pré-instaladas no seu Mac e podem ser usadas para criar facilmente utilitários auxiliares simples. Estes são mais um substituto dos utilitários bash e regulares do UNIX. Depende da natureza do que você quer fazer.

Se você quiser mover um punhado de arquivos pelo disco, compactá-los e transferi-los via SSH, bash é provavelmente a melhor escolha. Assim que você tiver uma lógica de programação real (qualquer coisa que envolva muitos objetos ou números), provavelmente deverá procurar outras linguagens de script.

    
por 26.11.2011 / 17:43
1

Publicamos uma lista de favoritos (OS X e centrados no bash) em Tutoriais de terminal do OS X - Superusuário .

Uma das melhores maneiras de aprender uma linguagem de script é modificar os scripts existentes. Dê uma olhada em coisas como:

Alguns livros com exemplos de código para download gratuito:

por 27.11.2011 / 15:55
0

Eu acho que apenas o uso básico de cerca de 20 a 25 comandos é suficiente, e a arquitetura básica do Linux é obrigatória. Dependendo do seu tipo de trabalho, você pode começar a aprender sobre esses comandos apenas:

vi, ls, find, sed, awk, grep, cat, inicialização e encerramento de serviços, netstat, nmap, traceroute, ping, mv, cp, rm, etc.

Estes são os comandos mais comuns, que são usados no bash.

Além disso, você pode seguir este tutorial:

link

link

Além disso, você precisa aprender scripts básicos de shell para automatizar alguns processos.

    
por 26.11.2011 / 17:06