Usando parâmetros posicionais em funções bash

1

Aqui está o exemplo, no qual $1 não funciona.

$ cat ~/myScript
#!/bin/bash
function hello () {
echo "Hello $1"
}
hello
$ ./myScript
 Hello
    
por Josef Klimuk 21.11.2017 / 15:50

2 respostas

2

Pense em funções como mini-scripts dentro de um script. Eles são ignorados pelo script até serem chamados. Portanto, os parâmetros posicionais são ignorados até serem passados para a função.

Eles são limitados quanto ao que podem fazer. Eu sei que eles não podem suportar if then declarações dentro da função como eles são ignorados. E existem algumas outras regras, mas você pode exit do seu script de dentro de uma função. Se você verificar erros nos parâmetros, esses devem ser executados antes que a função seja chamada.

Você está querendo passar parâmetros posicionais ($ 1, $ 2, $ 3 etc ...) para o seu script. No entanto, você está esperando o parâmetro posicional a ser passado para a função. Sem especificar o parâmetro quando você chama a função, a função não está recebendo o parâmetro. Você precisa dar o parâmetro.

Pegue seu script:

#!/bin/bash
function hello () {
echo "Hello $1"
}
hello

Simplesmente adicionando um $1 à linha que diz apenas hello por si só fará com que o parâmetro seja passado para a função.

#!/bin/bash
function hello () {
echo "Hello $1"
}
hello $1

Agora, chamar o script com um parâmetro produzirá a saída desejada:

$ ./myscript Terrance
Hello Terrance

Se você quiser adicionar uma verificação rápida a ela para que não receba entrada em branco após o script, adicione a seguinte verificação em seu script antes da chamada:

#!/bin/bash
function hello () {
    echo "Hello $1"
}
if [[ $1 != "" ]]; then
    hello $1
    exit
else
    echo "Please input a name.  Example: $0 Terrance"
fi

Meu script de exemplo acima faz uma verificação de != , o que significa not equal to , em seguida, os dois "" significam em branco. Portanto, if parameter 1 is not equal to blank then é true, em seguida, ele executa a chamada de função com o parâmetro e sai do script depois que a função é chamada. Senão dá minha mensagem de erro. O parâmetro posicional de $0 é o parâmetro do comando que você acabou de chamar.

Exemplos do meu script sendo chamado:

$ ./myscript 
Please input a name.  Example: ./myscript Terrance


$ ./myscript Terrance
Hello Terrance

Conforme você mantém o script, você começa a aprender mais truques e comandos apropriados e como eles são usados. Continue no script !!

Espero que isso ajude!

    
por Terrance 21.11.2017 / 17:04
0

Funciona, mas talvez você não o use como deveria. $ 1 refere-se ao primeiro parâmetro da função.

function hello () { echo "Hello $1" }

declara uma função para que, quando você a chamar com parâmetros, ela imprima "Olá" e o primeiro parâmetro:

hello WORLDDD

imprime "Olá, WORLDDD"

    
por Aurelien 21.11.2017 / 15:58