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.