Shell

Shell é a linha de comando do Linux (e UNIX). É o shell quem interpreta a linha de comandos digitada pelo usuário no terminal e chama os programas desejados.

Além de executar comandos do sistema, o shell também tem seus próprios comandos, como IF, FOR e WHILE, e também possui variáveis e funções. Tudo isso para tornar um pouco mais “esperta” e flexível essas chamadas de comandos feitas pelo usuário.

Como estas são as características de uma linguagem de programação, o shell é uma ferramenta muito poderosa para desenvolver scripts e programinhas rápidos para automatizar tarefas do dia-a-dia.

Para os que vêm do mundo MSDOS, pense no shell como um Batch (dos arquivos .BAT). O shell é como um Batch (muito) melhorado.

Assim como serve para fazer scripts de 5 ou 10 linhas, ele é versátil e completo o suficiente para que GRANDES programas sejam feitos nele. A interação natural com o sistema operacional e seus programas multiplica os poderes do shell.

Interfaces interativas com o usuário, programas de cálculos, CGI, instaladores de software, manipulação de banco de dados, rotinas de backup, tudo isso pode ser feito em shell!

Shell script é uma linguagem de script usada em vários sistemas operativos, 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).

Bash executando comandos

É 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"

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 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.

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.

Exemplos:

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”).

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

A idéia de um shell foi concebida na época em que a interface pela qual os usuários de computadores podiam trabalhar com o computador era muito limitada. Além disso os recursos eram limitados, CPU e memória. Existia apenas um teclado, sem mouse, sem som, sem efeitos gráficos bonitos. O modo pelo qual o usuário se comunica com o computador nessa interface é escrevendo os programas que se deseja abrir (ou se quiser entender como ordens ao computador) no teclado e dando “enter”. Para quem é usuário de windows só lembrar do Dos, que nada mais é que um sistema para operar discos com uma interface limitada de um shell. Os interpretadores são vários, ksh, csh, zsh, sh e bash. Entre os diversos interpretadores existentes os usuários de Linux utilizam mais o bash. É como se os programas fossem funções e o shell fosse a interação entre os programas.

BASH

O bash é uma camada que liga o usuário com o sistema operacional. Seu nome vêm de Bourne Again Shell uma intertextualização com Bourne Shell, mais conhecido com sh. O sh foi o pioneiro dos shells, a partir dele vieram os outros. O Bourne shell foi escrito por Stephen Bourne um pesquisador da AT&T Bell Labs. O bash é compatível com o sh e provê algumas funcionalidades do csh e do ksh. Ele segue o padrão IEEE Posix shell e inicialmente foi escrito para ser o shell padrão do sistema GNU. Ele tem uma portabilidade boa, existem implementações pra sistemas Windows, MacOsX e, é claro, Linux e BSDs. Para usuários de Windows ele pode ser usado através do projeto Cygwin. As funções são praticamente todas portadas, só tendo dependência em alguma funcionalidade do sistema Unix que o programador não pode usar(como o /proc). Com o passar do tempo o bash evoluiu junto com os sistemas abertos e hoje tem muitas mais funcionalidades e facilidades que antigamente. Saber como programar em shell ajuda também na administração do sistema. E praticamente se torna indispensável pra um bom administrador.

Fonte: http://pt.wikipedia.org/wiki/Shell_script; http://www.inf.ufpr.br/afms03/shell e outros;

2010 12 18