23Aug
O termo "shell scripting" é mencionado frequentemente em fóruns Linux, mas muitos usuários não estão familiarizados com isso. 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 tarefas tediosas de gerenciamento de arquivos.
O que é Shell Scripting?
Ser um usuário Linux significa que você brinca com a linha de comando. 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. A maioria das distros Linux hoje usam o Bash, e é assim que você está realmente entrando em comandos.
Agora, alguns de vocês que usaram o Windows antes de usar o Linux podem se 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. Foi uma maneira inteligente e ordenada de fazer algumas coisas, como executar jogos em seu laboratório de computador do ensino médio quando você não conseguiu abrir pastas do sistema ou criar atalhos. Os arquivos em lote no Windows, quando úteis, são uma imitação barata de scripts de shell.
Shell scripts nos permitem programar comandos em cadeias e fazer com que o sistema os execute como um evento com script, como arquivos em lote. Eles também permitem funções muito mais úteis, como a substituição de comandos. Você pode invocar um comando, como data, e usá-lo como saída de um esquema de nomeação de arquivos. Você pode automatizar backups e cada arquivo copiado pode ter a data atual anexada ao final do seu nome. Os scripts também não são apenas invocações de comandos. Eles são programas por direito próprio. O Scripting permite que você use funções de programação - como "para" loops, se /then/ mais instruções, e assim por diante - diretamente na interface do seu sistema operacional. E, você não precisa aprender outro idioma porque está usando o que você já conhece: a linha de comando.
Esse é realmente o poder do script, penso eu. Você começa a programar com comandos que você já conhece, enquanto aprende grampos da maioria das principais linguagens de programação. Precisa fazer algo repetitivo e tedioso? Guião! Precisa de um atalho para um comando realmente complicado? Guião! Quer criar uma interface de linha de comando muito fácil de usar para algo? Guião!
Antes de começar
Antes de começar nossa série de scripts, vamos cobrir algumas informações básicas. Usaremos o shell bash, que a maioria das distribuições Linux usam nativamente. O Bash está disponível também para usuários de Mac OS e Cygwin no Windows. Uma vez que é tão universal, você deve ser capaz de script independentemente da sua plataforma. Além disso, desde que existam todos os comandos referenciados, os scripts podem funcionar em várias plataformas, requerendo pouco ou nenhum ajuste.
Scripting pode facilmente fazer uso de privilégios de "administrador" ou "superusuário", por isso é melhor testar scripts antes de colocá-los no trabalho. Também use o senso comum, como se certificar de que você tenha backups dos arquivos nos quais você está prestes a executar um script. Também é muito importante usar as opções certas, como -i para o comando rm, para que sua interação seja necessária. Isso pode evitar alguns erros desagradáveis. Como tal, leia os scripts que você baixar e tenha cuidado com os dados que você possui, apenas no caso de as coisas darem errado.
No seu núcleo, 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 texto rico, ou um documento do Word. Como adoro a facilidade de uso que nano fornece, vou usar isso.
Script Permissões e nomes
Os scripts são executados como programas e, para que isso aconteça, eles precisam ter as permissões adequadas. Você pode fazer scripts executáveis executando o seguinte comando nela:
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 isso em vez disso:
chmod u + x ~ /somecrazyfolder/ script1
Para executar este script, você teria que inserir o CD no diretório adequado e, em seguida, executar o script como este:
cd ~ / somecrazyfolder
. /script1
Para tornar as coisas mais convenientes, você pode colocar scripts em uma pasta "bin" no diretório inicial:
~ / bin
Em muitas distros modernas, esta pasta não é mais criada por padrão, mas você pode criá-la. Isso geralmente é onde os arquivos executáveis são armazenados que pertencem ao seu usuário e não a outros usuários. Ao colocar scripts aqui, você pode apenas executá-los digitando seu nome, assim como outros comandos, em vez de ter que circular e usar o prefixo './'.
Antes de nomear um script, no entanto, você deve o seguinte comando para verificar se você possui um programa instalado que usa esse nome:
qual [comando]
Muitas pessoas mencionam seus "scripts" iniciais e quando eles tentamexecute-o na linha de comando, nada acontece. Isso ocorre porque ele entra em conflito com o comando de teste, que não faz nada sem argumentos. Certifique-se sempre de que seus nomes de script não entrem em conflito com os comandos, caso contrário você pode encontrar-se fazendo coisas que você não pretende fazer!
Scripting Guidelines
Como mencionei anteriormente, cada arquivo de script é essencialmente texto simples. Isso não significa que você pode escrever o que você quer com todos os willy-nilly, no entanto. Quando um arquivo de texto é tentado para ser executado, os shells analisarão por eles para pistas sobre se eles são scripts ou não, e como lidar com tudo corretamente. Por isso, há algumas diretrizes que você precisa saber.
- Cada script deve estar com "#!/bin/ bash "
- Cada nova linha é um novo comando
- As linhas de comentários começam com um #
- Comandos estão envolvidos por()
Hash-Bang Hack
Quando um shell analisa através de um arquivo de texto, a maneira mais direta de identificar o arquivo comoum script é fazendo sua primeira linha:
#!/bin/ bash
Se você usar outro shell, substitua seu caminho aqui. As linhas de comentários começam com hashes( #), mas adicionando o bang( !) E o caminho do shell depois que é uma espécie de hack que irá ignorar esta regra de comentário e forçará o script a executar com o shell que essa linha aponta.
New Line = Novo comando
Cada nova linha deve ser considerada um novo comando ou um componente de um sistema maior. Se /then/ outras instruções, por exemplo, assumirão várias linhas, mas cada componente desse sistema está em uma nova linha. Não deixe um comando sangrar na próxima linha, pois isso pode truncar o comando anterior e dar-lhe um erro na próxima linha. Se o seu editor de texto estiver fazendo isso, você deve desligar o envoltório de texto para estar no lado seguro. Você pode desligar o envio de texto em nano bit atingindo ALT + L.
Comente frequentemente com #s
Se você começar uma linha com #, a linha será ignorada. Isso o transforma em uma linha de comentários, onde você pode se lembrar de qual foi o resultado do comando anterior ou o que o próximo comando fará.Mais uma vez, desligue o envoltório de texto ou interrompe seu comentário em várias linhas que todos começam com um hash. Usar muitos comentários é uma boa prática para manter, pois permite que você e outras pessoas modifiquem seus scripts mais facilmente. A única exceção é o hack Hash-Bang acima mencionado, então não siga #s com! S.;-) Comandos
são cercados por parênteses
Nos dias mais antigos, as substituições de comando foram feitas com marcações únicas( `, compartilha a tecla ~).Ainda não vamos tocar nisso, mas como a maioria das pessoas sai e explora depois de aprender o básico, provavelmente é uma boa idéia mencionar que você deveria usar parênteses em vez disso. Isto é principalmente porque quando você aninha - coloque comandos dentro de outros comandos - os parênteses funcionam melhor.
Seu primeiro script
Vamos começar com um script simples que permite copiar arquivos e anexar datas até o final do nome do arquivo. Vamos chamá-lo de "datecp".Primeiro, verifique se esse nome entra em conflito com algo:
Você pode ver que não há saída do comando, então estamos todos configurados para usar esse nome.
Vamos criar um arquivo em branco na pasta ~ / bin:
toque ~ /bin/ datecp
E, vamos alterar a permissão agora, antes de esquecer:
Vamos começar a construir nosso script então. Abra esse arquivo no seu editor de texto de escolha. Como eu disse, gosto da simplicidade de nano.
nano ~ /bin/ datecp
E, vamos seguir em frente e colocar a primeira linha prévia, e um comentário sobre o que esse script faz.
Em seguida, vamos declarar uma variável. Se você já tomou álgebra, provavelmente você sabe o que é isso. Uma variável nos permite armazenar informações e fazer coisas com ela. As variáveis podem "expandir" quando mencionadas em outro lugar. Ou seja, em vez de exibir seu nome, eles exibirão seus conteúdos armazenados. Posteriormente, você pode contar essa mesma variável para armazenar informações diferentes, e qualquer instrução que ocorrer depois disso use as novas informações.É um espaço reservado realmente extravagante.
O que vamos colocar variável? Bem, vamos armazenar a data e a hora! Para fazer isso, chamaremos o comando da data.
Dê uma olhada na captura de tela abaixo para saber como criar a saída do comando da data:
Você pode ver isso adicionando diferentes variáveis que começam com%, você pode alterar a saída do comando para o que deseja. Para mais informações, você pode ver a página do manual para o comando da data.
Vamos usar essa última iteração do comando da data, "data +% m_% d_% y-% H.% M.% S", e use isso em nosso script.
Se estivéssemos para salvar este script agora, poderíamos executá-lo e isso nos daria o resultado do comando da data como esperávamos:
Mas, vamos fazer algo diferente. Vamos dar um nome de variável, como date_formatted para este comando. A sintaxe adequada para isso é a seguinte:
variável = $( comando - argumentos de opções)
E para nós, nós o construiríamos assim:
date_formatted = $( data +% m_% d_% y-% H.%M.% S)
Isto é o que chamamos de substituição de comando. Estamos essencialmente dizendo ao bash que sempre que a variável "data_formatado" aparece, para executar 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, "data_formatted".
Aqui está um exemplo de script e sua saída:
Observe que existem dois espaços na saída. O espaço dentro das frases do comando de eco e o espaço na frente da variável são ambos exibidos. Não use espaços se não quiser que apareçam. Observe também que sem essa linha "eco" adicionada, o script não daria absolutamente nenhuma saída.
Vamos voltar ao nosso script. Vamos adicionar na parte de cópia do comando.
cp -iv $ 1 $ 2. $ data_formatted
Isto irá invocar o comando de cópia, com as opções -i e -v. O primeiro solicitará a verificação antes de substituir um arquivo, e o último exibirá o que está sendo reduzido na linha de comando.
Em seguida, você pode ver que adicionei a opção "$ 1".Quando scripts, um sinal de dólar( $) seguido por um número indicará esse argumento numerado do script quando ele foi invocado. Por exemplo, no seguinte comando:
cp -iv Trogdor2.mp3 ringtone.mp3
O primeiro argumento é "Trogdor2.mp3" eo segundo argumento é "ringtone.mp3".
Olhando para trás em nosso script, podemos ver que estamos referenciando dois argumentos:
Isso significa que, quando executarmos o script, precisaremos fornecer dois argumentos para que o script seja executado corretamente. O primeiro argumento, $ 1, é o arquivo que será copiado e substituído como o 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 referenciamos a variável "data_formatada" de acima. Curioso quanto ao que isso faz?
Aqui está o que acontece quando o script é executado:
Você pode ver que o arquivo de saída está listado como o que eu entrei por US $ 2, seguido por um período e a saída do comando da data! Faz sentido, certo?
Agora, quando eu executo o comando datecp, ele executará este script e me permitirá copiar qualquer arquivo para um novo local e adicionar automaticamente a data e a hora ao final do nome do arquivo.Útil para arquivar coisas!
Shell scripting é o coração de fazer o seu sistema operacional funcionar para você.Você não precisa aprender uma nova linguagem de programação para que isso aconteça também. Tente scripts com alguns comandos básicos em casa e comece a pensar sobre o que você pode usar.
Você script? Tem algum conselho para novatos? Compartilhe seus pensamentos nos comentários! Há mais para entrar nesta série!