você está aqui: Home → Colunistas → Cantinho do Shell
Por Rubens Queiroz de Almeida
Data de Publicação: 03 de Dezembro de 2006
A programação shell tem alguns recursos bem interessantes. Cada comando executado gera um código de retorno, indicando se o comando foi bem sucedido ou se houve algum problema.
Vejamos alguns exemplos:
% cd dir bash: cd: dir: Arquivo ou diretório não encontrado % echo $? 1 % mkdir dir % cd dir % echo $? 0
O código de retorno de um comando executado em bash fica armazenado na variável $?.
Eu tentei ir para o diretório dir, mas como dir não existe, o código de retorno da operação deu 1 (falso). Em seguida criei o diretório e fui para lá. Desta vez deu certo e o código de retorno foi 0 (verdadeiro).
Vejam que interessante, na programação shell, eu posso fazer o teste dentro de uma construção de laço ou condicional, como um if:
#!/bin/bash if cd dir then touch a b c ls -l echo estou em dir else mkdir dir cd dir touch a b c ls -l fi
O comando cd dir faz parte da condição de teste do if. Se deu certo, vou para dir, se não funcionou, crio o diretório, vou para lá ("mkdir dir" e "cd dir").
Vamos fazer um teste real:
% cddir.sh ./cddir.sh: line 3: cd: dir: Arquivo ou diretório não encontrado total 0 -rw-rw-r-- 1 queiroz queiroz 0 Jun 13 12:38 a -rw-rw-r-- 1 queiroz queiroz 0 Jun 13 12:38 b -rw-rw-r-- 1 queiroz queiroz 0 Jun 13 12:38 c
O diretório dir não existia, daí a mensagem de erro. A shell script executou o else, criou o diretório dir, criou os arquivos a, b, c, e em seguida emitiu o comando ls.
Para não receber mensagens de erro eu posso redirecionar estas saídas para /dev/null:
if cd dir 2> /dev/null
Este foi apenas um exemplo extremamente útil de um recurso de shell scripts. Entendendo-se o conceito o número de aplicações possíveis é enorme.
Eu utilizei a shell bash, em um sistema Conectiva Linux versão 9.0.
Dica veiculada na Dicas-L em 16 de junho de 2003 Foi inspirada na palestra de Júlio Neves, no IV Fórum Internacional de Software Livre, em Porto Alegre, em 2003. Se houver algum erro aqui a culpa é minha e não do Júlio, é claro :-)