Shell script

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Text document with red question mark.svg
Este artigo ou secção contém uma lista de fontes ou uma única fonte no fim do texto, mas estas não são citadas no corpo do artigo, o que compromete a confiabilidade das informações.
Por favor, melhore este artigo introduzindo notas de rodapé citando as fontes, inserindo-as no corpo do texto quando necessário.
Bash executando comandos

Shell script é uma linguagem de script usada em vários sistemas operativos (operacionais), com diferentes dialetos, dependendo do interpretador de comandos utilizado. Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux.

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Depois de salvo você tem que executar o arquivo, dessa forma:

./"Nome do arquivo, sem aspas"

No Linux o script tem que ter permissão de execução, isto pode ser feito com o comando chmod +x "arquivo", para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando 'man bash' ou 'man chmod' (sem aspas).

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

Índice

[editar] Shell

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, Windows através do Cygwin [1] 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 scripts shell podem conter estruturas de programação tais como:

  • estruturas de decisão (if)
  • estruturas de repetição (for)(while)
  • funções e argumentos
  • definições de variáveis e escopo destas

[editar] Exemplos de uso

[editar] Apagar arquivos velhos

Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

#!/bin/bash
 
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; este par se chama, em inglês, de shebang), informando diretamente ao núcleo 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

Referências

[editar] Ligações externas

Outros projetos Wikimedia também contêm material sobre este tema:
Wikilivros Livros e manuais no Wikilivros
 ver·editar  Portal do LinuxTux.svg

Arch · Debian · Fedora · Ubuntu · Mandriva · Linux Mint · OpenSUSE · PCLinuxOS · Puppy · Sabayon · Slackware Linux · Kurumin · Big Linux · Poseidon Linux · Ekaaty Linux · DreamLinux

Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Colaboração
Imprimir/exportar
Ferramentas
Noutras línguas