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 "#,* e @" 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 é:

Foto: © Linux.
Artigo original publicado por Carlos-vialfa. Tradução feita por ninha25. Última modificação: 16 de dezembro de 2017 às 15:25 por pintuda.
Este documento, intitulado 'Bash: os parâmetros ', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (https://br.ccm.net/) ao utilizar este artigo.
Alterar a senha via script
Criar seu próprio comando Linux