O comando Linux Set é um comando Shell embutido que permite exibir ou definir variáveis de concha e ambiente. Neste guia, cobrimos o comando set e demonstramos as várias maneiras pelas quais o utilitário da linha de comando pode ser usado.
Sintaxe básica
O comando SET leva a seguinte sintaxe:
$ comando -Options argumentos
Opções de comando
Existem várias opções que podem ser usadas com o comando set. Vamos explorar alguns deles:
Valores de saída
A seguir, são apresentados os valores de saída do shell associados ao comando set:
0: O comando foi bem -sucedido.
Defina o comando sem nenhuma opção
Sem argumentos, o comando set lista todas as variáveis do shell, incluindo seus valores.
$ set
Defina parâmetros posicionais com o comando set
O comando Linux Set pode ser usado para atribuir valores aos parâmetros posicionais. Um parâmetro posicional é uma variável em um programa de shell e seu valor é referenciado como $ n onde n é um dígito que denota a posição do parâmetro.
O valor de US $ 1 é o primeiro parâmetro posicional após o nome do arquivo ou comando. O valor de US $ 2 é o segundo parâmetro e assim por diante.
Suponha que executamos o comando mostrado abaixo:
$ set vermelho azul verde
Aqui, o Red corresponde ao parâmetro posicional $ 1, o azul corresponde ao parâmetro $ 2 e, finalmente, Green corresponde a $ 3.
Para listar todos os parâmetros na ordem de $ 1 $ 2 $ 3 executam o comando ECHO abaixo:
$ eco "$*"
Para listar o primeiro parâmetro, execute:
$ eco $ 1
Para listar o segundo parâmetro, execute:
$ eco $ 2
E assim por diante.
Use o comando SET para despertar todos os parâmetros posicionais
Para despertar os parâmetros posicionais, execute o comando set com hífens duplos - como mostrado.
$ set --
Mais uma vez, se você tentar listar os parâmetros posicionais, você obterá uma saída em branco, implicando que eles não tenham sido.
Ignore uma variável não ligada
Por padrão, um script de shell tem vista para uma variável indefinida. No script myscript.SH mostrado abaixo, a variável $ foo ainda não está definida e, portanto, não existe.
Quando o script é executado, ele retorna uma linha em branco para a linha que contém uma variável inexistente e passa a executar a seguinte linha:
$ ./myscript.sh
Essa anomalia é indesejada e os desenvolvedores desejam ser notificados em caso de variáveis indefinidas. A diretiva set -u no início do script imprimirá um erro no shell se o script for executado em uma variável indefinida.
Quando o script é executado mais uma vez, o erro sobre uma variável não ligada é exibido.
Exibir um erro se um comando não existe
Geralmente, se um comando for executado em um erro e falhar em executar, o shell do bash continuará a executar os comandos restantes. Tomemos, por exemplo, o script do shell abaixo:
O comando foobar é inexistente e um erro deve ser exibido no shell do bash quando o script é executado para mostrar que o script em um problema. No entanto, isso não acontece e a concha é executada na próxima linha, como mostrado:
Como o exemplo anterior, isso não é uma boa prática ao escrever scripts de shell, especialmente para segurança e depuração. Idealmente, o script deve parar quando encontrar um erro. Para abordar esse cenário, defina o conjunto da diretiva -e no início do script, como mostrado.
Quando você tenta executar o script novamente, você enfrentará o erro como mostrado:
Exibir um erro em comandos tubos
O conjunto de diretiva -e não funciona ao lidar com comandos canalizados. Considere o script abaixo:
Quando você executa o script, ele retorna um erro, mas continua a executar o comando subsequente:
Para superar esse obstáculo, passe o conjunto -EO PipeFail Directive, como mostrado:
$ set -EO Pipefail
Desta vez, o script termina e não executa a próxima linha.
Defina o Allexport e notifique as opções
Para definir o Allexport e notificar opções, execute o comando:
$ set -O Allexport -o Notify
Conclusão
Esses foram alguns exemplos de como você pode usar o comando set em seus scripts de shell. Como observado, o comando set pode ser uma ferramenta útil na definição de parâmetros posicionais e depurando seus scripts de shell.