Shell script
Origem: Wikipédia, a enciclopédia livre.
Índice |
[editar] Shell Scripts
Antes de saber o que é um script em shell, é importante saber o que é um Shell.
Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha. Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada. Outros exemplos de linguagens para scripts são o php, perl, python, javascript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.
Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário. Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez. Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.
Os arquivos de lote (batch - arquivos *.bat) do windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe. Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do windows, podendo executar tarefas muito mais complexas e elaboradas.
Os scripts shell podem ser agendados para execução através da tabela crontab, entre outras coisas. É uma ferramenta indispensável aos administradores de sistemas Unix.
O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh. Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.
Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de Software Livre.
[editar] Características
Os shell scripts podem conter estruturas de programação tais como:
- estruturas de decisão (if)
- estruturas de repetição (for)(while)
- funções etc.
[editar] Exemplos de uso
[editar] Apagar arquivos velhos
Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:
#!/bin/sh cd /tmp find . -type f -mtime +30 -delete
Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.
Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:
- $ limpatmp.sh
Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.
Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.
Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção), informando diretamente ao kernel qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso.
Exemplo:
- #!/bin/bash
Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula.
Exemplo:
- $ mount -t reiserfs /dev/hda1 /mnt/hda1
- $ ls /mnt/hda1
- $ cp -r /mnt/hda1/* /home/user/backup
- $ umount /dev/hda1
Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").
[editar] Data Anterior
# Função em Shell Script para retornar a data anterior, levando em conta o mes e ano. fn_data_anterior() { DIA=$D MES=$M ANO=$A # Dado DIA, MES e ANO numericos, obtem a data do dia anterior DIA=`expr $DIA - 1` if [ $DIA -eq 0 ]; then MES=`expr $MES - 1` if [ $MES -eq 0 ]; then MES=12 ANO=`expr $ANO - 1` fi DIA=`cal $MES $ANO` DIA=`echo $DIA | awk '{ print $NF }'` fi } ano=`date +%Y`; mes=`date +%m`; let dia=10\#`date +%d`; if (( $dia<10 )); then j=0$dia; else j=$dia; fi dia=$j; j=""; D=$dia M=$mes A=$ano fn_data_anterior echo $DIA $MES