Variáveis são um lugar para guardar dados. O Bash tem dois tipos de dados: strings e arrays. Vamos falar sobre arrays mais adiante.
Você atribui uma variável assim:
name="value"
Importante: não pode haver espaços ao redor do sinal de igual!
Quando houver espaços, como neste exemplo,
x = 10
o bash vai chamar o comando x com os dois argumentos = e 10!
Variáveis também podem ser chamadas de parâmetros. Os dois termos serão usados de forma intercambiável neste documento.
Alguns parâmetros importantes usados ou definidos pelo bash incluem:
PATH: uma lista de diretórios separados por dois-pontos, usada para localizar comandos externos.IFS: o "separador interno de campos".
Vamos ver como ele é usado a seguir.PWD: seu diretório de trabalho atual.
Ele terá o mesmo valor que a saída do comando pwd.RANDOM: um número inteiro pseudoaleatório entre 0 e 32767.BASH_VERSION: a string de versão da instância do bash em execução.Um nome de variável é formado por letras maiúsculas, letras minúsculas, números e underscore. Ele não pode começar com um número.
Você obtém o valor de um parâmetro com a sintaxe $varname.
x=10
echo "The value of x is $x"
Para evitar que o nome da variável se confunda com o texto ao redor, você pode colocar o nome da variável entre chaves.
Por exemplo, para imprimir a string 10x10
echo "${x}x$x"
# or
echo "${x}x${x}"
Alguns guias de estilo recomendam usar chaves na maioria dos casos, por legibilidade e/ou consistência.
Como discutimos na lição Comandos e argumentos, comandos podem receber argumentos. Scripts do bash não são exceção. Os argumentos passados à instância atual do bash são chamados de parâmetros posicionais. Eles podem ser recuperados com estes parâmetros especiais:
$1: o primeiro parâmetro posicional$2 ... $9: os parâmetros seguintes${10} ...: dois dígitos exigem chaves.$0: o nome do script atual.Argumentos de uma função do shell também são parâmetros posicionais, tratados exatamente assim. Vamos ver mais sobre funções em uma lição mais adiante.
Existem alguns parâmetros especiais que ajudam você a trabalhar com os parâmetros posicionais.
$# expande para o número de parâmetros posicionais."$@" expande para a lista de todos os parâmetros posicionais, cada um como uma palavra separada."$*" expande para uma única string com todos os parâmetros posicionais unidos por um caractere.
$IFS, que por padrão é um espaço.O "$@" é a forma mais segura de passar parâmetros posicionais para outro comando mantendo-os devidamente entre aspas.
É também o que você vai usar para iterar sobre os parâmetros posicionais:
for arg in "$@"; do
do_something_with "$arg"
done
Na prática, "$@" é usado com mais frequência do que "$*".
Uma operação muito frequente em scripts do bash é capturar a saída de um comando e guardá-la em uma variável. Para isso, você vai usar a substituição de comando.
var=$(command)
Por exemplo, para deixar uma string em maiúsculas, você pode fazer assim:
text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!
O bash tem muitos recursos internos para manipular variáveis e strings, para que você não precise chamar comandos externos.
Deixar um texto em maiúsculas.
Na seção anterior, mostrei como usar tr para colocar um texto em maiúsculas.
Para fazer isso no bash:
echo "${text^^}"
Da mesma forma, ${text,,} deixa o valor em minúsculas.
Fornecer um valor padrão se a variável estiver vazia.
default="nothing here"
result=""
echo "${result:-$default}"
# => nothing here
Buscar e substituir.
text="Hello world!"
echo "${text//[aeiou]/X}"
# => HXllX wXrld!"
Existem muitas outras expansões de parâmetros interessantes: extrair uma substring, obter o comprimento da string, atribuir um valor padrão, remover texto do início ou do fim do valor, e mais. Leia sobre elas no manual.