English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Variáveis do Shell

Ao definir uma variável, o nome não deve conter o símbolo de dólar ($, necessário no PHP), por exemplo:

seu_nome="w"3codebox.com"

Atenção, o nome da variável e o sinal de igual (=) não podem ter espaços, isso pode ser diferente de todos os outros idiomas de programação que você está familiarizado. Além disso, o nome da variável deve seguir as seguintes regras:

  •             O nome pode usar letras, números e sublinhados, e o primeiro caractere não pode começar com um número.

  •             Não pode haver espaços no meio, pode usar sublinhado (_).

  •             Não pode usar símbolos de pontuação.

  •             Não pode usar palavras-chave do bash (pode usar o comando help para ver as palavras-chave reservadas).

Exemplos de nomes válidos de variáveis do Shell a seguir:

w3codebox
LD_LIBRARY_PATH
_var
var2

Nome de variável inválido:

?var=123
user*name=w3codebox

Além de atribuir explicitamente, também é possível usar instruções para atribuir valores a variáveis, por exemplo:

for file in `ls /etc`
ou
for file in $(ls /etc)

As seguintes instruções farão: /loop de nomes de arquivos no diretório etc.

Uso de variáveis

Para usar uma variável definida, basta adicionar o símbolo de dólar ($) no início do nome da variável, por exemplo:

your_name="qinjx"
echo $your_name
echo ${your_name}

As chaves {} ao redor do nome da variável são opcionais, pode ou não ser adicionado, as chaves são usadas para ajudar o interpretador a identificar os limites da variável, por exemplo:

for skill in Ada Coffee Action Java; do
    echo "I am good at ${skill}Script"
done

Se não adicionar chaves {} à variável skill, escrevendo echo "I am good at $skillScript", o interpretador interpretará $skillScript como uma variável (cujo valor está vazio), e o resultado da execução do código não será o esperado.

Recomenda-se adicionar chaves {} a todas as variáveis, isso é um bom hábito de programação.

Variáveis definidas podem ser redefinidas, por exemplo:

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

Escrever assim é permitido, mas atenção, na segunda atribuição, não pode ser escrito $your_name="alibaba", use o símbolo de dólar ($) apenas ao usar variáveis.

Variáveis de leitura apenas

O comando readonly pode ser usado para definir variáveis como variáveis de leitura apenas, o valor dessas variáveis não pode ser alterado.

O exemplo a seguir tenta alterar a variável de leitura apenas, resultando em erro:

#!/bin/bash
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://pt.oldtoolbag.com"

Executar o script, o resultado será:

/bin/sh: NAME: This variable is read only.

Exclusão de variável

O comando unset pode ser usado para excluir variáveis. Sintaxe:

unset variable_name

Após a exclusão da variável, ela não pode ser usada novamente. O comando unset não pode excluir variáveis de leitura.

Exemplo

#!/bin/sh
myUrl="https://pt.oldtoolbag.com"
unset myUrl
echo $myUrl

A execução do exemplo acima não terá nenhuma saída.

Tipo de variável

Quando o shell é executado, existem três tipos de variáveis em simultâneo:

  • 1) Variáveis locaisAs variáveis locais são definidas dentro de scripts ou comandos e são válidas apenas no exemplo atual do shell, outros programas iniciados pelo shell não podem acessar as variáveis locais.

  • 2) Variáveis de ambienteTodos os programas, incluindo os programas iniciados pelo shell, podem acessar as variáveis de ambiente, alguns programas precisam das variáveis de ambiente para garantir seu funcionamento normal. Em necessário, scripts de shell também podem definir variáveis de ambiente.

  • 3) Variáveis do shellAs variáveis do shell são variáveis especiais configuradas pelo programa shell. Parte das variáveis do shell são variáveis de ambiente e parte são variáveis locais, essas variáveis garantem o funcionamento normal do shell

String do Shell

As strings são o tipo de dados mais comum e útil no programming de shell (além dos números e strings, não há muitos outros tipos de dados úteis), as strings podem ser usadas com aspas duplas, aspas simples, ou nem usar aspas.

Aspas simples

str='this is a string'

Restrições das strings de aspas simples:

  •             Qualquer caractere dentro das aspas simples será exibido na forma original, as variáveis dentro de uma string de aspas simples são inválidas;

  •             Não pode haver um único caractere de aspa simples dentro de uma string de aspas simples (mesmo após o caractere de escape também não pode), mas pode aparecer em pares, como parte da concatenação de strings.

Aspas duplas

your_name='w3codebox'
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

O resultado da saída é:

Olá, eu sei que você é "w3codebox"!

Vantagens das aspas duplas:

  •             As variáveis podem estar dentro das aspas duplas

  •             Os caracteres de escape podem aparecer dentro das aspas duplas

Concatenar strings

seu_nome="w"3codebox
# Usar aspas duplas para concatenar
greeting="hello, "${seu_nome}" !"
greeting_1="hello, ${seu_nome} !"
echo $greeting $greeting_1
# Usar aspas simples para concatenar
greeting_2='hello, '${seu_nome}' !'
greeting_3='hello, ${seu_nome} !'
echo $greeting_2  $greeting_3

O resultado da saída é:

hello, w3codebox ! hello, w3codebox !
hello, w3codebox ! hello, ${seu_nome} !

obter comprimento da string

string="abcd"
echo ${#string} # saída 4

extrair substring

O exemplo a seguir extrai a substring a partir da string na posição 2 caractere começando a cortar 4 caractere:

string="w3codebox é um excelente site
echo ${string:1:4} # saída unoo

AtençãoO índice do primeiro caractere é: 0.

procurar substring

procurar caractere i ou o a posição (qual letra aparece primeiro é calculada):

string="w3codebox é um excelente site
echo `expr index "$string" io` # saída 4

Atenção: No script acima, ` é o caractere de contrabarra invertida, não o caractere de aspa simples '.

Arrays no Shell

O bash suporta arrays unidimensionais (não suporta arrays multidimensionais) e não há restrições no tamanho do array.

Semelhante ao C, os índices dos elementos do array começam a ser numerados por 0. Para obter um elemento do array, é necessário usar o índice, que pode ser um número inteiro ou uma expressão aritmética, cujo valor deve ser maior ou igual a 0.

Definir array

No Shell, os parênteses são usados para representar arrays, e os elementos do array são separados por "espaços". A forma geral de definir um array é:

nome_do_array=(valor1 valor2 ... valor n)

por exemplo:

array_name=(value0 value1 value2 value3)

ou

array_name=(
value0
value1
value2
value3
)

Também pode definir separadamente cada componente do array:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

Pode não usar índices contínuos e o intervalo de índices não tem restrições.

Ler um array

O formato geral para ler um valor de elemento de array é:

${nome_do_array[índice]}

por exemplo:

valuen=${array_name[n]}

O símbolo @ pode ser usado para obter todos os elementos do array, por exemplo:}}

echo ${array_name[@]}

Obter o comprimento do array

A maneira de obter o comprimento do array é a mesma que a de obter o comprimento de uma string, por exemplo:

# Obter o número de elementos do array
length=${#array_name[@]}
# Ou
length=${#array_name[*]}
# Obter o comprimento de um elemento individual do array
lengthn=${#array_name[n]}

Comentários do Shell

Linhas que começam com # são comentários e serão ignorados pelo interpretador.

Adicionar um # a cada linha # Configuração de comentários em múltiplas linhas, assim:

#--------------------------------------------
# Isso é um comentário
# autor: Tutorial Básico
# site: pt.oldtoolbag.com
# slogan: Aprender o básico, para ir mais longe!
#--------------------------------------------
##### Área de Configuração do Usuário INÍCIO #####
#
#
# Aqui pode-se adicionar informações de descrição do script
# 
#
##### Área de Configuração do Usuário FIM #####

O que fazer se, durante o desenvolvimento, precisar comentar um grande bloco de código temporariamente e descomentá-lo mais tarde?

Adicionar um símbolo # a cada linha é muito trabalhoso, então pode-se usar um par de chaves {} para definir um bloco de código a ser comentado, que não será executado em nenhum lugar, alcançando o efeito de comentários.

Comentários em múltiplas linhas

Os comentários em múltiplas linhas também podem usar o seguinte formato:

:<<EOF
Conteúdo de Comentário...
Conteúdo de Comentário...
Conteúdo de Comentário...
EOF

EOF também pode usar outros símbolos:

:<<'
Conteúdo de Comentário...
Conteúdo de Comentário...
Conteúdo de Comentário...
'
:<<!
Conteúdo de Comentário...
Conteúdo de Comentário...
Conteúdo de Comentário...
!