Tentei aprender script shell (bash) algumas vezes, mas fui afastado pela sintaxe. Então descobri o Python e fui capaz de fazer a maioria das coisas que um script de shell pode fazer no Python. Agora não tenho certeza se devo investir meu tempo no aprendizado de scripts shell. Então, eu quero perguntar:
Quais são os pontos fortes do script de shell que o tornam uma ferramenta indispensável em comparação com Python?
Não sou um administrador de sistemas por profissão, mas estou interessado em configurar sistemas Linux para usuários domésticos, portanto, acho que aprender script de shell pode ser necessário.
bash
shell especificamente não está universalmente disponível em todas as distros Linux, em particular aquelas para sistemas embarcados e outras que executam obusybox
executável. Os scripts que têm como alvo o próprio shell Bourne, com o qualbash
é compatível com versões anteriores, serão executados em todos os sistemas compatíveis com POSIX, no entanto, essa linguagem é muito mais restrita do que a implementada porbash
."Quais são os pontos fortes do shell scripting que o tornam uma ferramenta indispensável em comparação ao Python?"
A concha não é indispensável. Por que você acha que existem tantos? bash, tcsh, csh, sh, etc., etc.,
Python é um shell. Não o que você usaria para executar todos os comandos, mas para scripts, é o ideal.
Python é mais ou menos uma parte padrão de todas as distros Linux.
Os shells mais tradicionais fazem muitas coisas.
Eles têm uma interface de usuário útil para executar comandos. Isso inclui comandos de uma linha onde o shell pesquisa seu PATH, bifurca e executa o programa solicitado. Também inclui pipelines, sequências e programas simultâneos (usando
;
,|
e&
), bem como alguns redirecionamentos (usando>
e<
).Eles têm uma pequena capacidade parecida com uma linguagem de programação para executar scripts. Esta linguagem é bastante difícil de usar e extremamente ineficiente. A maioria das declarações nesta linguagem requer a bifurcação de um ou mais processos adicionais, desperdiçando tempo e memória.
Executar programas a partir do shell, redirecionar stderr para um arquivo de log e esse tipo de coisa é bom. Faça isso na casca.
Quase todo o resto pode ser feito de forma mais eficiente e clara como um script Python.
Você precisa de ambos . No entanto, você nunca deve escrever um script com instruções if ou loops em uma linguagem shell tradicional.
fonte
if
instrução de shell "simples" geralmente envolve a execução dotest
programa. O shell é uma linguagem de programação ruim em todos os aspectos.bash
pelo menos) têm embutidos para lidar com a tomada de decisão (por exemplo,test
é umbash
embutido, além de construções mais versáteis). Certamente tem seus pontos fracos, mas também seus pontos fortes. Também vale a pena aprender em detalhes porque é de um paradigma muito diferente de outros tipos de linguagem.cat "$1" | ssh "$2" "cat - >\"$1\""
gerouscp
. Eles sabiam a melhor forma de projetá-lo porque já o estavam usando.O shell torna as ações comuns e simples realmente simples, à custa de tornar as coisas mais complexas muito mais complexas.
Normalmente, um pequeno script de shell será mais curto e mais simples do que o programa python correspondente, mas o programa python tenderá a aceitar modificações normalmente, enquanto o script de shell tenderá a se tornar cada vez menos sustentável à medida que o código é adicionado.
Isso tem a conseqüência de que, para obter a produtividade diária ideal, você precisa de script de shell, mas deve usá-lo principalmente para scripts descartáveis e usar python em qualquer outro lugar.
fonte
Não há nada que você possa fazer com scripts de shell que não possa ser feito com python. A grande vantagem dos scripts de shell é que você usa os mesmos comandos que usa quando usa o shell, então se você for um usuário pesado do shell, o script de shell em algum momento se tornará uma maneira muito rápida e fácil de automatizar seu trabalho de shell .
Também acho mais fácil lidar com tubos de dados em scripts de shell do que em python, embora seja absolutamente viável em python.
E, finalmente, você não precisa ativar um intérprete adicional para executar os scripts de shell, o que oferece uma vantagem de uso de memória e velocidade muito pequena, mas às vezes perceptível.
Mas, novamente, os scripts Python são muito mais fáceis de manter, estou tentando migrar de scripts de shell grandes e feios para scripts Python exatamente por esse motivo. Também é mais fácil lidar com exceções e controle de qualidade com Python.
fonte
não é necessário aprender script de shell, como indicam todas as respostas anteriores; mas aprender nunca é uma coisa ruim. é realmente uma questão de prioridades pessoais. é muito difícil outra pessoa lhe dizer o que vale e o que não vale o seu tempo.
a maioria dos programadores acha que aprender novas linguagens fica cada vez mais fácil. (o mesmo também se aplica às línguas naturais.) e quanto mais cedo você começar, melhor.
mais: ter aprendido um idioma permite que você extravagantemente dissipe suas limitações a partir de uma posição de total conhecimento e familiaridade. isso provavelmente não fará com que você transa, mas pode render uma cerveja de seus colegas!
fonte
Eu concordo com a maioria das respostas anteriores. Eu considero os comandos do shell mais adequados para tarefas orientadas a sistemas de arquivos (copiar e mover arquivos, grep, etc). Shell é melhor, na minha opinião, se você tiver que ler e escrever no arquivo, já que um único
>>file.txt
redirecionamento é anexado ao arquivo instantaneamente, em vez de precisar, digamosfile=open('file.txt','a'); file.write()
, etc.Atualmente, para meu uso pessoal, eu misturo os dois, criando um script python e chamando os.system ('command') ou os.popen ('command') toda vez que alguma ação é mais fácil no shell do que no python.
fonte
O shell está disponível em todos os lugares. Se você se limitar a um conjunto relativamente básico de funcionalidade portátil, seus scripts podem ser executados em telefones celulares, roteadores sem fio, DVRs, netbooks, estações de trabalho, grandes servidores de ferro e semelhantes. O Python não está necessariamente incluído fora da caixa em muitos sistemas e, dependendo do ambiente, pode ser difícil instalá-lo.
Aprender alguns scripts de shell também pode ajudá-lo a aprender alguns truques de linha de comando, já que a linha de comando é, bem, o shell. Também é bom pegar uma linha de comando bastante longa e complicada e convertê-la em um script mais geral depois que você perceber que precisará dele um pouco mais.
O shell também possui alguns recursos bastante poderosos; pipelines são uma construção de controle realmente interessante que é nativa apenas para o shell, pelo que eu sei.
fonte
Outra coisa a considerar ao escolher scripts de shell do Python é a versão do Python que será executada nas máquinas de destino. RHEL5 (para citar um) ainda existirá por muito tempo. RHEL5 está preso ao Python 2.4. Existem muitas bibliotecas legais que dependem da funcionalidade adicionada ao Python pós-2.4.
fonte