Alternativas de script para scripts de shell Bash

16

Acabei de migrar para uma estação de trabalho UNIX. Minha memória dos scripts de shell do Bash desapareceu desde a escola e acho a sintaxe altamente confusa. Gostaria de saber quais outras linguagens de script são usadas para automatizar tarefas. Os dois mais populares que eu já ouvi falar são Perl e Python.

  1. Qual linguagem de script é mais usada pelas lojas do mundo real?
  2. Qual linguagem de script se parece mais com a sintaxe C / C ++?
  3. Existe outra linguagem de script que eu não conheço?

Obrigado pela ajuda,

Scott

Scott Davies
fonte
2
Provavelmente deve ser um wiki da comunidade.
EBGreen
2
Na verdade, eu uso o PHP agora para a maioria das tarefas do sistema. Vou montar uma resposta adequada com isso em breve. Possui muitas bibliotecas integradas, o que é útil.
Kyle Hodgson
Os idiomas destinados ao shell fazem algo que outros idiomas talvez não; Que é gerenciar e manter sob controle todos os processos filhos gerados recursivamente. O blog publicitário Phusion Passenger explica por que em detalhes: phusion.github.io/baseimage-docker Em suma, seus scripts escritos em lang-x provavelmente não lidam corretamente com as rotinas de desligamento. O que é perfeitamente aceitável, desde que você os execute como filhos de um processo de shell real. Isenção de responsabilidade, não sou especialista. Esta informação é apenas da melhor maneira possível, que pode ser falha.
ThorSummoner

Respostas:

12

Até certo ponto, é uma questão de preferência pessoal. Perl e Python estão definitivamente lá em cima em termos de popularidade.

Para responder duas de suas três perguntas, no entanto:

  1. Eu acho que o bash é o mais usado, provavelmente seguido pelo perl. Apenas adivinhando, não sei se alguém já fez uma pesquisa. :)
  2. Existem muitos bilhões de linguagens de script por aí. :)

Minha recomendação é Python. É fácil de ler e escrever, imensamente poderoso, e há muitos recursos úteis na Web para aprendê-lo, sem mencionar o código que você pode copiar e redefinir.

DictatorBob
fonte
11
Eu concordo. Acho o Python fácil de aprender e capaz de fazer qualquer coisa que eu jogue nele, como tem sido nos bons e velhos dias do OS / 2 com o REXX.
slovon 04/09/09
3
+1 para python ... o poder de C em uma linguagem de script. Você pode fazer seus scripts tão simples ou tão complexo como você quer;)
KFro
11
em sistemas não-NT, o módulo python shtorna acessível o uso do python como uma linguagem de script de shell; No entanto, se você se deparar com casos extremos (como o multiprocessamento), precisará aprender o módulo de subprocesso que até hoje acho muito difícil de usar.
ThorSummoner
5

Perl e Python são as respostas óbvias; mas cada um deles é usado para concluir tarefas diferentes:

  1. Bash - sem dúvida o mais fácil de aprender. Com os scripts do Bash, você executa comandos e manipula a saída.
  2. Python - o segundo mais fácil de aprender. O Python é muito mais útil que o Bash, já que você pode usar o Python para escrever programas completos, e é bem suportado pela comunidade. O Python também é extremamente legível e fácil de editar meses depois.
  3. Perl - o melhor dos três (para scripts), mas facilmente a curva de aprendizado mais acentuada. Possui muito bom suporte a expressões regulares (que é o principal motivo de uso ainda hoje), e você provavelmente encontrará muitos scripts Perl ao longo do tempo. Os principais problemas com o Perl são a legibilidade do código - meses após você escrever o código, não será possível descobrir o que ele faz. Então é melhor comentar bastante.
  4. Awk / Sed - ambos muito úteis, mas ambos muito difíceis de aprender. Eu sugiro abordar estes últimos, a menos que você seja bom em padrões.

Com relação a qual aprender agora (já que você presumivelmente não conhece nenhuma delas), eu aprenderia Python. É o mais simples e mais útil de se conhecer.

E quanto às respostas para suas perguntas:

Qual linguagem de script é mais usada pelas lojas do mundo real?

Todos eles, mas eu imagino que o Perl tenha um pouco de vantagem aqui (sendo que ele está em uso na administração do sistema por muito mais tempo).

Qual linguagem de script se parece mais com a sintaxe C / C ++?

Perl

Existe outra linguagem de script que eu não conheço?

Ruby, Tcsh / Csh, http://en.wikipedia.org/wiki/Interpreted_language

Michael Pobega
fonte
2
Se você dedicar algum tempo ao perl, poderá escrever perl perfeitamente legível. As pessoas que escrevem código espaguete são muito rápidas em culpar Perl por suas falhas.
Cian
11
Estou falando apenas com base em experiências como administrador de sistemas; Eu tive que manter o código que outras pessoas escreveram que foi quase impossível de ler. Normalmente, acabo reescrevendo o código em Python.
Michael Pobega 04/09/09
3

awk para pequenos trabalhos, python para mais do que oneliners.

O Python (se você não usa APIs específicas e outras coisas dependentes da plataforma) possui uma rica "biblioteca padrão", disponível em todas as plataformas nas quais você usa a versão do python. Isso é muito bom, pois você pode reutilizar seus scripts facilmente e significa que seu conhecimento é um bom investimento, mesmo que você mude sua plataforma.

Em nossa empresa, usamos python para todos os scripts, monitoramento e ... e java para o aplicativo, e estamos bem em ambiente heterogêneo.

Slovon
fonte
1

Eu diria que perl e python são provavelmente as duas melhores alternativas. Você pode fazer muito com sed e awk também.

EBGreen
fonte
1

Sh (bourne shell), grep, awk e sed é sempre uma boa coisa para entender novamente. O Perl é excelente se você não deseja muito regexar texto e a manutenção não é tão importante (não dizendo que isso não é possível). Pitão; se a legibilidade é importante para você. Minha preferência é Python, mas todas essas ferramentas são boas para a maioria das coisas. Você pode reconsiderar seu requisito de sintaxe c / c ++, mantendo-o preso não o ajudará a longo prazo.

Martin P. Hellwig
fonte
Obrigado Martin. Eu notei (a partir de amostras na Web), que o Perl tem uma semelhança notável com o PHP (embora eu tenha certeza de que era Perl antes do PHP, historicamente). Esta é uma afirmação justa?
9309 Scott Davies
PHP 1.0 foi um script Perl, por isso não é coincidência :)
Bill Weiss
1

Se você deseja aprender algo do zero, provavelmente é melhor (re) aprender o bash.

Além disso, perl e python são populares atualmente; Sou parcial em relação ao perl, mas meu estilo de script em perl não mudou muito desde que o Perl 4 foi lançado.

Não conheço nenhuma linguagem de script "semelhante à c-sintaxe".

David Mackintosh
fonte
1

Perl, sem dúvida, pelo menos pelo incrível recurso do CPAN ( http://search.cpan.org/ ). O benefício de usar uma linguagem de script com uma comunidade de contribuidores tão grande é que é improvável que você precise inventar algo sozinho.

O Perl também tem o benefício de ser o mais complexo possível para a situação atual. Você pode tratá-lo como uma linguagem de script simples para administração rápida ou scripts de uso único, mas pode usar conceitos orientados a objetos ou sistemas extensos de meta-objetos quando desejar criar aplicativos maiores e fáceis de manter (como daemons, servidores, clientes).

As diferenças entre as linguagens de script por si só não são graves o suficiente para escolher um vencedor claro, mas você deve observar principalmente como será fácil encontrar informações sobre os tópicos de seu interesse.

A sintaxe Perl também pode estar notavelmente próxima de C, contanto que você possa contornar a falta de digitação e os sigilos; o uso avançado de perl viria naturalmente à medida que você finalmente aprendesse os pontos fortes do idioma.

E para os pessimistas no campo da legibilidade: você pode escrever código difícil de ler em qualquer idioma. Se você revisar seu código de 4 meses atrás e não conseguir entendê-lo, estará fazendo algo errado.

ps Esta postagem foi preenchida com links para vários módulos amigáveis ​​à administração no CPAN, mas aparentemente novos usuários podem postar apenas um link; portanto, use o link CPAN para pesquisar itens como 'CVS' 'SVN' 'Cron' e 'Moose' (um extenso sistema de objetos)

jsoverson
fonte
1
  • Rubi
  • Pitão
  • Go - uma linguagem de plataforma cruzada, o script é mencionado como um dos pontos fortes do Go .
  • Node.js - veja Grunt.js, Gulp.js. Muitos projetos agora estão usando o Node.js como uma ferramenta de automação de shell.
  • Perl
Brian Jordan
fonte
1

[para obter conselhos gerais sobre scripts, consulte as outras respostas]

Esta resposta é sobre o uso de programas de linha de comando e também sobre grandes cadeias.

Para executar cadeias de programas CLI, e talvez muitas cadeias em sequência, o bash é o mais fácil. O Perl pode fazer o mesmo, mas o idioma é muito mais difícil de aprender e é muito mais complexo e, como muitos apontaram, é fácil escrever Perl inteligível.

Se você estiver interagindo com arquivos e parâmetros, o bash é mais fácil de começar porque você pode criar um protótipo no shell, copiar em um script e adicionar algumas matrizes e loops com o mínimo de sobrecarga.

Exemplos do que quero dizer:

$ cat input.dat | numerical_model source_data ${SRC} grid_size ${GRID_SIZE} param1 ${P1} param2 ${P2} | tee ${OUTPUT} | plotter title ${TITLE} ylabel ${YLABEL} xlabel ${XLABEL} > ${OUTPUT_FIG}
$ cat ${OUTPUT} | stats_cmd bin_size ${BINSIZE} dist_type ${DIST_TYPE} | tee ${OUTPUT_STATS} | plotter plot_type ${PLOT_TYPE} title ${TITLE_STATS} > ${OUTPUT_FIG_STATS}

No bash, é fácil agrupar isso em alguns loops sobre alguns desses parâmetros. No entanto , o código fica difícil de ler quando o script tem mais do que algumas dezenas de linhas. --- imagine 30 conjuntos de comandos (algumas linhas cada) para trinta gráficos de dados diferentes ---

Perl e Python podem ser melhores para scripts grandes porque possuem uma sintaxe mais limpa para loop e variáveis, mas os comandos bash devem ser gerados como strings, executados como subprocessos e stdin, stdout capturado. Isso pode ser feito, mas não pode substituir completamente o ambiente de shell nativo.

Se as conchas tivessem uma linguagem melhor, tudo isso seria evitado.

novelistparty
fonte
0
  1. mais usado: Perl, principalmente por razões históricas. O Python está amplamente disponível em todas as distribuições Linux e BSD (é instalado no Mac OSX) e é muito mais agradável de aprender / programar. Obviamente, depois de obter a sintaxe, o Bash é mais simples para quase tudo o que você pode fazer na linha de comando. Afinal, é a linha de comando.

    • Sintaxe C: existe o csh , mas você pode facilmente instalar o TCC e usar o C real como linguagem de script, compilada a partir da fonte em menos tempo do que a inicialização de outras línguas.

    • outras linguagens de script: lotes! Lua , Ruby , JavaScript ...

Javier
fonte
0

Você deve usar uma combinação de todos aqueles onde for apropriado. Eu realmente não gosto de perl (legibilidade), mas é bom para muitas coisas. O Python, por outro lado, era algo novo para mim em termos de administração do sistema, até que eu precisei gerenciar (e ainda preciso) algumas máquinas KVM. Iniciar, parar, salvar, carregar, migrar todas essas máquinas via script se tornou realidade após 1 hora de mexer nas ligações python do libvirt.

Por último, mas não menos importante, eu não usaria perl ou python se for necessário, digamos, despejar todos os bancos de dados de um servidor mysql todas as noites (cada banco de dados em seu próprio arquivo de despejo), tará-los e sincronizá-los com outro servidor. Por quê ? Porque é mais rápido e fácil escrevê-lo no bash :)

No final, você deve usar o idioma que melhor se adequa à sua tarefa atual e não usar apenas uma determinada linguagem de script apenas porque gosta mais.

sh1ny
fonte
0

Eu gosto de rubi É simples e fácil de programar. Há um excelente livro sobre administração de sistemas usando ruby .

O Ruby é usado em vários sistemas de gerenciamento de configurações (capistrano, chef, fantoche) e na última versão do metasploit.

Você pode usar o rush , um substituto para o shell Unix com sintaxe ruby ​​e fazer coisas assim:

local = Rush::Box.new('localhost') 
remote = Rush::Box.new('my.remote.server.com')     
local_dir = local['/Users/adam/myproj/']
remote_dir = remote['/home/myproj/app/']

local_dir.copy_to remote_dir
remote_dir['**/.svn/'].each { |d| d.destroy }
chmeee
fonte
Obrigado chmeee. Eu não tinha ideia de que você poderia usar o Ruby para sysadmin - sempre achei que era centrado na web. Estou procurando algo em uso na maioria das organizações. É justo dizer que Ruby para sysadmin ainda é muito avançado?
9309 Scott Davies
11
Shell / Perl são os únicos dois idiomas que você pode encontrar instalados de maneira confiável em qualquer lugar. O Python é provavelmente o próximo mais comum, com o ruby ​​executando um quarto muito distante (na verdade, provavelmente o quinto, atrás do awk).
Cian
@ScottDavies PHP e ASP.net são as únicas linguagens centradas na Web que eu conheço; até mesmo o Javascript projetado para ser executado exclusivamente na Web amadureceu, sendo a falta de validação de formulário. No entanto, você pode enviar html com qualquer idioma, até mesmo com o bash .
ThorSummoner
0

Exemplo de uma linha de Ruby:

> echo 'Shell is the best!' | ruby -pe 'gsub("Shell", "Ruby")' 

Ruby is the best!

> printf "foo\nbar\nbaz\n" |  ruby -ne 'BEGIN { i = 1 }; puts "#{i} #{$_}"; i += 1'

1 foo
2 bar
3 baz

Eu usaria rubi.

Compare com sh, é moderno e poderoso.

Compare ao python, é consistência, uma edição, um gerenciador de pacotes. E eu não gosto de sintaxe de indentação.

Compare com Perl, um pouco da velha escola e a sintaxe é muito complexa para mim.

Jacob
fonte