Bash variáveis especiais ($ 0, $?, $#, [email protegido]</a>, $$, $*)
- 1815
- 502
- Randal Kuhlman
Bash é uma concha poderosa que fornece uma ampla gama de variáveis especiais que podem ser usadas para manipular e controlar o comportamento dos scripts. Essas variáveis fornecem informações essenciais sobre o ambiente em que o script está em execução, incluindo os argumentos da linha de comando, o ID do processo atual e o status do último comando executado.
Neste artigo, forneceremos um guia aprofundado para todas as variáveis especiais do Bash, incluindo exemplos de uso e armadilhas comuns para evitar.
- '
$ 0
' - O nome do script sendo executado. - '
$ 1- $ 9
' - Os nove primeiros argumentos da linha de comando. - '
$#
' - O número de argumentos da linha de comando. - '
$*
' - Todos os argumentos da linha de comando como uma única string. - '
[Email protegido]
' - Todos os argumentos da linha de comando como uma matriz. - '
$?
' - O status de saída do último comando executado. - '
$$
' - O ID do processo do shell atual. - '
$!
' - O ID do processo do último comando de fundo.
Vamos discutir as variáveis especiais em detalhes com exemplos.
$ 0 - o nome do script sendo executado
Em Bash, $ 0 é um parâmetro especial que mantém o nome do script ou shell que está sendo executado atualmente. Também é conhecido como "nome" ou "argumento de Zeroth" do script.
Por exemplo, suponha que você tenha um script chamado “MyScript.sh ” que você deseja fugir de qualquer diretório. Nesse caso, você pode usar a variável $ 0 para determinar o nome do script que está sendo executado:
#!/Bin/Bash Echo "O script atual em execução é: $ 0"12 | #!/Bin/Bashecho "O script atual em execução é: $ 0" |
Você também pode determinar o diretório em que o script está localizado e depois usar esse diretório para localizar todos os arquivos que o script precisa.
#!/bin/bash script_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "O script está executando de $ script_dir"123 | #!/bin/bashscript_dir = "$ (cd" $ (dirname "$ bash_source [0]") "&& pwd)" echo "O script está executando de $ script_dir" |
$ 1, $ 2,…, US $ 9 - Argumentos da linha de comando
O $ 1, $ 2,…, $ 9 As variáveis contêm os nove primeiros argumentos da linha de comando passados para o script. Essas variáveis são úteis para criar scripts de shell que aceitam a entrada do usuário.
Por exemplo, suponha que você tenha um script chamado "saudar.sh ” Isso leva um nome como seu primeiro argumento de linha de comando. Nesse caso, você pode usar o $ 1 variável para recuperar o nome e depois usá -lo na saída do script.
#!/bin/bash eco "Olá, $ 1!"12 | #!/bin/Bashecho "Olá, $ 1!" |
Se um script precisar acessar mais de nove argumentos da linha de comando, o $ 10, $ 11,…, $ n variáveis podem ser usadas para recuperá -las. Essas variáveis podem ser usadas com o comando Shift para processar argumentos de linha de comando em lotes. Verifique se a variável está fechada com Suportes.
$# - o número de argumentos da linha de comando
O $# A variável contém o número de argumentos da linha de comando passados para o script. Esta variável é útil para criar scripts de shell que validam a entrada do usuário.
Por exemplo, suponha que você tenha um script chamado "validar.sh”Isso requer dois argumentos da linha de comando. Nesse caso, você pode usar a variável $# para garantir que o número correto de argumentos seja fornecido.
#!/bin/bash se [[$# -ne 2]] então echo "Uso: Validar.sh [nome de usuário] [senha] "Saia 1 FI123456 | #!/bin/bashif [[$# -ne 2]] Então echo "Uso: Validar.sh [nome de usuário] [senha] "Saia 1FI |
$* - todos os argumentos da linha de comando como uma única string
O $* A variável contém todos os argumentos da linha de comando passados para o script como uma única string. Esta variável é útil para criar scripts de shell que precisam manipular toda a string da linha de comando.
Por exemplo, suponha que você tenha um script chamado "juntar.sh ” Isso se junta a duas cordas fornecidas como argumentos da linha de comando. Nesse caso, você pode usar o $* variável para concatenar as cordas.
#!/bin/bash ingressado = "$*12 | #!/bin/Bashjoined = "$* |
[Email Protected] - Todos os argumentos da linha de comando como uma matriz
O [Email protegido] A variável contém todos os argumentos da linha de comando passados para o script como uma matriz. Esta variável é útil para criar scripts de shell que precisam manipular argumentos individuais da linha de comando.
Por exemplo, suponha que você tenha um script chamado "lista.sh ” Isso lista todos os arquivos em um diretório fornecido como um argumento da linha de comando. Nesse caso, você pode usar o [Email protegido] variável para iterar sobre cada nome de diretório e listar os arquivos nesse diretório.
#!/Bin/Bash for Directory em arquivos de listagem "$@" Do Echo "123456 | #!/Bin/Bashfor Directory em "[Email Protected]" Do Echo "Listing Arquivos no diretório $:" LS -L $ DirectoryDone |
$? - O status de saída do último comando executado
O $? A variável contém o status de saída do último comando executado. Essa variável é útil na criação de scripts de shell que precisam lidar com erros ou tomar ações diferentes, dependendo do sucesso ou falha de um comando.
Por exemplo, suponha que você tenha um script chamado “Criar arquivo.sh ” Isso cria um arquivo e retorna um status de saída indicando sucesso ou falha. Nesse caso, você pode usar o $? variável para verificar o status de saída e tomar as medidas apropriadas.
#!/bin/bash toque myfile.txt se [[$? -Eq 0]] então eco "arquivo criado com sucesso" else eco "erro de criação de arquivo" fi12345678 | #!/bin/Bashtouch myfile.txtif [[$? -Eq 0]] então eco "arquivo criado com sucesso" else eco "erro de criação de arquivo" fi |
$$ - o ID do processo do shell atual
O $$ A variável contém o ID do processo do script atual. Essa variável é útil para criar scripts de shell que precisam gerenciar vários processos ou criar nomes exclusivos de arquivos.
Por exemplo, suponha que você tenha um script chamado "registro.sh ” Isso registra informações em um arquivo com um nome exclusivo com base no ID do processo. Nesse caso, você pode usar o $$ variável para gerar um nome de arquivo exclusivo.
#!/bin/bash log_file = "log _ $$.TXT "ECHO" Logndo para arquivar $ log_file "123 | #!/bin/bashlog_file = "log _ $$.TXT "ECHO" Logndo para arquivar $ log_file " |
$! - O ID do processo do último comando de fundo
O $! A variável contém o ID do processo do último comando de fundo executado pelo script. Essa variável é útil para criar scripts de shell que precisam gerenciar vários processos ou monitorar o progresso dos comandos de longa duração.
Por exemplo, suponha que você tenha um script chamado "fundo.sh ” que executa um comando em segundo plano e registra seu progresso. Nesse caso, você pode usar o $! variável para monitorar o progresso do comando.
#!/bin/bash mycommand & pid = $! enquanto ps -p $ pid>/dev/null; O comando do eco "ainda está em execução" Sleep 1 Done Echo "Comando terminou"12345678 | #!/bin/BashmyCommand & pid = $!enquanto ps -p $ pid>/dev/null; O comando do eco "ainda está em execução" Sleep 1Doneecho "Comando terminou" |
Conclusão
Em conclusão, as variáveis especiais do Bash fornecem informações essenciais sobre o ambiente em que o script está em execução. Essas variáveis permitem criar scripts de shell mais flexíveis, robustos e resistentes a erros. Ao dominar o uso dessas variáveis, você pode levar suas habilidades de script de shell para o próximo nível.