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 undefinedO operador ${parameter=value} define o valor da variável se ela não estiver definida:
programicio@Programicio:~$ echo ${NIL=default}
defaultO 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}
nullNote 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 undefinedComo 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
undefinedO 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.