Linux - Resultados de Comandos e Operadores
Substituição de Comandos
O Linux permite obter e salvar o resultado de comandos para uso em outros comandos. Esta funcionalidade é chamada de "substituição de comandos" ou command substitution. Para isso, o comando é colocado entre crases. Por exemplo, vamos exibir a data atual no formato "dd.MM.yy":
programicio@Programicio:~$ echo "today is `date +%d.%m.%y`" today is 06.07.24
Neste caso, obtemos o resultado do comando date +%d.%m.%y
, que formata a data, e o inserimos na string do comando echo
.
Podemos também salvar o resultado do comando em uma variável:
programicio@Programicio:~$ TODAY=`date +%d.%m.%y` programicio@Programicio:~$ echo "today is $TODAY" today is 22.03.24
Aqui, salvamos o resultado do comando date +%d.%m.%y
na variável TODAY
.
Operadores de Substituição
Antes de executar algumas ações, pode ser necessário verificar se uma variável possui um valor. Para isso, o Bash oferece operadores de substituição, ou substitution operators. Por exemplo, usando esses operadores, podemos atribuir um valor padrão se a variável não estiver definida. Podemos usar os seguintes operadores de substituição:
${parameter:-value}
: mostra o valor se o parâmetro não estiver definido.${parameter=value}
: atribui o valor ao parâmetro se ele não existir. Este operador não faz nada se o parâmetro existir, mas estiver vazio.${parameter:=value}
: atribui o valor ao parâmetro se ele não tiver valor ou não existir.${parameter:?value}
: mostra o valor se o parâmetro não existir ou estiver vazio. O uso desta construção interrompe imediatamente o script do shell.${parameter:+value}
: mostra o valor se o parâmetro tiver valor. Se o parâmetro estiver vazio, nada acontece.
Vamos ver como utilizá-los. Primeiro, uma variável pode não estar definida, por exemplo:
programicio@Programicio:~$ echo $NIL
Aqui, a variável NIL
não está definida, e o comando echo
não mostra nada. Agora, vamos aplicar os operadores de substituição.
O operador ${parameter:-value}
mostra o valor se a variável não estiver definida:
programicio@Programicio:~$ echo ${NIL:-Variable NIL undefined} Variable NIL undefined
O operador ${parameter=value}
define o valor da variável se ela não estiver definida:
programicio@Programicio:~$ echo ${NIL=default} default
O operador ${parameter:=value}
atribui o valor à variável se ela não tiver valor ou não existir. Acima, a variável NIL
foi definida como "default". Ou seja, a variável NIL
existe e tem um valor. Vamos aplicar este operador à variável NIL
:
programicio@Programicio:~$ echo ${NIL:=null} default programicio@Programicio:~$ NIL= programicio@Programicio:~$ echo ${NIL:=null} null
Note que, inicialmente, NIL
tem um valor, então seu valor não é alterado. Após o comando NIL=
, a variável NIL
ainda existe, mas seu valor não está definido. Em seguida, usamos o operador :=
para definir o valor como null
.
O operador ${parameter:?value}
mostra o valor se o parâmetro não existir ou estiver vazio:
programicio@Programicio:~$ echo ${NIL:?Variable NIL is undefined} null programicio@Programicio:~$ echo ${VOID:?Variable VOID is undefined} bash: VOID: Variable VOID is undefined
Como a variável NIL
foi definida anteriormente como null
, o operador é aplicado a ela. A variável VOID
não foi definida anteriormente, então vemos a mensagem especificada.
O operador ${parameter:+value}
mostra o valor se a variável tiver um valor:
programicio@Programicio:~$ echo ${NIL:+Variable NIL is defined} Variable NIL is defined programicio@Programicio:~$ echo ${VOID:+Variable VOID is defined} programicio@Programicio:~$
Aqui, verificamos duas variáveis: NIL
e VOID
. Como apenas NIL
foi definida anteriormente, a mensagem é exibida somente para ela.
Os resultados desses operadores também podem ser atribuídos a variáveis:
programicio@Programicio:~$ NIL=null programicio@Programicio:~$ NIL=${NIL=undefined} programicio@Programicio:~$ echo $NIL null programicio@Programicio:~$ VOID=${VOID=undefined} programicio@Programicio:~$ echo $VOID undefined
O operador =
define o valor se a variável não existir. Neste caso, se as variáveis NIL
e VOID
não estiverem definidas, atribuímos o valor undefined
a elas. No entanto, se essas variáveis estiverem definidas, elas mantêm seus valores.