Shell bash script: condicional concatenação de seqüência de caracteres

0

Pergunta

Eu quero condicionalmente apresentar um texto em outro shell script. Ou seja, eu quero substituir o "AVISO" no caso deb=1 com "INFO":

#!/usr/bin/env bash
...
if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]]
then 
    ./discord.sh --webhook-url=$url --text "WARNING: $abc"
fi

Eu também quero evitar mais completa instrução SE. Espero ter algo como

deb=1 ? "INFO" : "WARNING"

Isso funciona? Se sim, como seria a declaração completa parecer? "--texto ..."

Obrigado antecipadamente.

bash debian raspberry-pi scripting
2021-11-22 10:27:36
4

Melhor resposta

0

Pode ser feito com um índice de matriz para correspondência numérica de nível de log com um nome de seqüência de caracteres:

#!/usr/bin/env bash

url=https://example.com/hook

logLevel=(WARNING INFO)

for abc in 97 98; do
  for deb in 0 1; do
    printf 'abc=%d, deb=%d:\n' $abc $deb
    (((i = 1 == deb) || 98 > abc)) &&
      echo ./discord.sh --webhook-url=$url --text "${logLevel[i]}: $abc"
  done
done

Saída:

abc=97, deb=0:
./discord.sh --webhook-url=https://example.com/hook --text WARNING: 97
abc=97, deb=1:
./discord.sh --webhook-url=https://example.com/hook --text INFO: 97
abc=98, deb=0:
abc=98, deb=1:
./discord.sh --webhook-url=https://example.com/hook --text INFO: 98
2021-11-22 14:27:12

uh, idéia muito legal. muito obrigado
bivvo

if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]] é verdade quando abc==100 e deb==1. Quando fixo remover o echo.
Walter A
0

Você quer dizer algo como isso?

 [[ $abc -lt 98 ]] && {
   ./discord.sh --webhook-url=$url --text "$([[ $deb -eq 1 ]] && echo "INFO" || echo "WARNING"): $abc"
 }

Pense nisso como uma alternativa para if then else fi (os parênteses são só necessário se você tiver mais comandos, mas eu gostaria de usá-lo de qualquer maneira, para facilitar a leitura (em alguns casos).

Basicamente é

[[ condition ]] && { commands if true } || { commands if false }

2021-11-22 11:37:38

Quando abc==100 e deb==1 você também deseja chamar discord.sh
Walter A

Sim, isso funciona para mim: $([[ $deb -eq 1 ]] && echo 'INFO' || echo 'WARNING')
bivvo

muito obrigado
bivvo
0

Você poderia, por favor, tente:

if (( abc < 98 || deb == 1 )); then
    loglevel=$( (( deb == 1 )) && echo "INFO" || echo "WARNING" )
    ./discord.sh --webhook-url=$url --text "$loglevel: $abc"
fi
2021-11-22 11:11:24

parece muito bom, obrigado!
bivvo

Esqueci de soltar a echo comando para a realização de testes. Agora corrigido.
tshiono

muito obrigado
bivvo
0

IMHO a resposta de @tshiono é o melhor. No entanto, torna-se de difícil leitura/debug.
Por que não usar um detalhado solução?
Quando ambas as condições forem verdadeiras, você deseja fazer com a INFORMAÇÃO.

if ((deb==1 )); then 
  ./discord.sh --webhook-url="$url" --text "INFO: $abc"
elif ((abc < 98)); then
  ./discord.sh --webhook-url="$url" --text "WARNING: $abc"
fi
2021-11-22 11:05:00

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................