Bash: os parâmetros

É possível fornecer a um script, na linha de comando, os argumentos necessários a sua execução. Estes argumentos são chamados de parâmetros. Existem duas categorias de parâmetros: os posicionais e os especiais. 



Os parâmetros posicionais

São simplesmente os argumentos passados em parâmetros na linha de comando, na invocação de um script. Eles são, então, atribuídos nas variáveis reservadas 1,2,3,...9,10,11,... e podem ser chamados com a ajuda das expressões $1,$2...${10},${11}...


Observação: o shell Bourne é limitado aos parâmetros de 0 a 9. 

Exemplo 1

Eis um pequeno script que se contenta de afixar certos argumentos passados em parâmetros em função de sua posição.
#!/bin/bash 
# affiche_param.sh 

echo "O 1° parâmetro é: $1" 
echo "O 3° parâmetro é: $3" 
echo "O 10° parâmetro é: ${10}" 
echo "Le 15ème parâmetro est : ${15}"

Basta então de evocar o script lhe passando um certo numero de parâmetros : 
./affiche_param.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 

Le 1° parâmetro é : 1 
Le 3° parâmetro é : 3 
Le 10° parâmetro é : 10 
Le 15° parâmetro é : 15
ou ainda:
./affiche_param.sh un 2 trois 4 5 6 7 8 9 dix 11 12 13 14 quinze 16 17 
Le 1° parâmetro é : um 
Le 3° parâmetro é : três 
Le 10° parâmetro é : dez 
Le 15° parâmetro é : quinze

Se alguns parâmetros contém características especiais ou espaços, é preciso então os cotar: 

./affiche_param.sh un 2 "le 3°" 4 5 6 7 8 9 dez 11 12 13 14 "o 15°" 16 17 
O 1° parâmetro é : um 
O 3° parâmetro é : o  3° 
O  10°  parâmetro é: dix 
O  15° parâmetro é: le 15°

Os parâmetros especiais

São também variáveis reservadas que permitem para alguns efetuar tratamentos nos parâmetros . Estes parâmetros são os seguintes:
$0 Contém o nome do script tal como ele foi invocado. 
$*O conjunto dos parâmetros na forma de um só argumento. 
$@ O conjunto dos argumentos, um argumento por parâmetro 
$# O número de  parâmetros passados para o script 
$? Le code volta do  último comando 
$$ Le PID su shell que se executa o script
$! Le PID do último processo lançado em último plano 

Exemplo 2

Eis outro pequeno script que instala o conjunto dos parâmetros especiais vistos acima
#!/bin/bash 
# affiche_param_2.sh 

# Afixagem do nome do script 
echo "O nome de meu script é : $0" 
# Afixagem do número de parâmetros 
echo "Você passou $# parâmetros" 
# Lista dos parâmetros (um só argumento) 
for param in "$*" 
do 
 echo "Eis a lista dos parâmetros (um só argumento) : $param" 
done 
# Lista dos parâmetros (um parâmetro por argumento) 
echo " Eis a lista dos parâmetros (um parâmetro por argumento) :" 
for param in "$@" 
do 
 echo -e "\tParâmetro : $param" 
done 
# Afixagem do processo 
echo "O PID o shell que executa o script é : $$" 
# Execução de um comando que se executa em plano de fundo 
sleep 100 & 
# Afixagem do processo lançado em plano de fundo 
echo "O  PID do último comando em plano de fundo é  : $!" 
# Afixagem do código retorno do último "echo" 
echo "O código retorno do comando precedente é  : $?" 
# Geração de um erro 
echo "Geração de um erro..." 
# Afixagem da mau comando 
echo "ls /etc/password 2>/dev/null" 
ls /etc/password 2>/dev/null 
# Afixagem do código retorno do último comando 
echo "O código retorno do comando precedente é  : $?" 
exit
O que resulta com a invocação seguinte:
./affiche_param_2.sh 1 2 3 quatro 5 six 

O nome de meu  script é: ./affiche_param_2.sh 
Você passou 6 parâmetros 
Eis a lista dos parâmetros (um argumento somente) : 1 2 3 quatro 5 six 
Eis a lista dos parâmetros (um  parâmetro por argumento) : 
        Parâmetro : 1 
        Parâmetro : 2 
        Parâmetro : 3 
        Parâmetro : quatro 
        Parâmetro : 5 
        Parâmetro : six 
O PID do shell que executa o script é: 6165 
O PID do último comando executado em plano de fundo: 6166 
O código retorno do comando precedente é: 0 
Geração de um erro... 
ls /etc/password 2>/dev/null 
O código de retorno do  comando precedente é: 1

Inicializar os parâmetros

- O comando "set" -

É possível afetar diretamente parâmetros au shell graças ao comando "set". 
Um simples comando como:
set param1 param2 param3
inicializara automaticamente os parâmetros posicionais "$1,$2,$3" com os valores "param1,param2,param3", apagando desta forma os antigos valores se por acaso eles existirem. Os parâmetros especiais "#,* @" são automaticamente atualizados como conseqüência. 

Exemplos

$ set param1 param2 param3 
$ echo "Número de parâmetros : $#" 
  Número de parâmetros ll: 3 
$ echo O segundo  parâmetro é : $2" 
   O 2° parâmetro é : param2 
$ echo  Os parâmetros são : $@" 
  Os parâmetros são: param1 param2 param3 

$ set pêssego maçã  
$ echo " Número de parâmetros: $#" 
  Número de  parâmetros : 2 
$ echo "Os parâmetros são : $@" 
  Os parâmetros são : pêssego maçã 

Esta funcionalidade pode mostrar-se útil no tratamento de arquivos linha 
por linha para isolar cada palavra (campo), e de formatar a saida. 

$ IFS=":"; set $(grep $USER /etc/passwd) 
$ echo -e "Login :\t$1\nNom :\t$5\nID :\t$3\nGroup :\t$4\nShell :\t$7" 

Login : jp 
Nome :   Jean-Philippe 
ID :    500 
Group : 500 
Shell : /bin/bash

- O comando "shift" -

O comando interno "shift" permite quanto à ele defasar os parâmetros. 
O valor do 1° parâmetro ($1) é substituído pelo valor do 2° parâmetro ($2), aquela do 20 parâmetro ($2) por aquele do 3° ($3), etc... 
Pode-se indicar um argumento (shift n) o número de (posiçéoes) que é preciso defasar os parâmetros. 

Exemple 3

Veja uma instalação do emprego do comando interno shift
#!/bin/bash 
# decale_param.sh 

echo 
echo " Número de parâmetros: $#" 
echo "O 1° parâmetro é: $1" 
echo "O 3° parâmetro é: $3" 
echo "O 6° parâmetro é: $6" 
echo "O 10° parâmetro é: ${10}" 
echo "=============================================" 
echo " Defasagem de um  passo com o comando \"shift\"" 
shift 
echo " Número de parâmetros: $#" 
echo "O 1° parâmetro é: $1" 
echo "O 3° parâmetro é: $3" 
echo "O 6° parâmetro é: $6" 
echo "O 10° parâmetro é: ${10}" 
echo "=============================================" 
echo " Defasagem de quatro passos com o comando \"shift 4\"" 
shift 4 
echo "Número de parâmetros: $#" 
echo "O 1° parâmetro é: $1" 
echo "O 3° parâmetro é: $3" 
echo "O 6° parâmetro é: $6" 
echo "O 10° parâmetro é: ${10}" 
echo
E seu resultado:
./decale_param.sh 1 2 3 4 5 6 7 8 9 10 

Número de parâmetros: 10 
O 1° parâmetro é: 1 
O 3° parâmetro é: 3 
O 6° parâmetro é: 6 
O 10° parâmetro é: 10 
============================================= 
Defasagem de um passo com o comando "shift" 
Número de parâmetros : 9 
O 1° parâmetro é: 2 
O 3° parâmetro é: 4 
O 6° parâmetro é: 7 
O 10° parâmetro é: 
============================================= 
Defasagem de quatro passos com o comando "shift 4" 
Número de parâmetros : 5 
O 1° parâmetro é: 6 
O 3° parâmetro é: 8 
O 6° parâmetro é: 
O 10° parâmetro é:

Nenhum comentário:

Postar um comentário