Shell bash scripting: condizionale di concatenazione di stringhe

0

Domanda

Voglio condizionale di presentare un testo in un altro script di shell. Significato voglio sostituire "AVVERTENZA" in caso di deb=1 con "INFO":

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

Anche io voglio evitare un altro completo istruzione IF. Mi aspetto di avere qualcosa di simile

deb=1 ? "INFO" : "WARNING"

Funziona? Se sì, come sarebbe la completa affermazione simile? "--testo ..."

Vi ringrazio in anticipo.

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

Migliore risposta

0

Può essere fatto con un indice di array corrispondenza numerica log-level con una stringa del nome:

#!/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

Output:

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, idea piuttosto fresco. vi ringrazio molto
bivvo

if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]] è vero quando abc==100 e deb==1. Quando fisso rimuovere il echo.
Walter A
0

Vuoi dire qualcosa di simile a questo?

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

Pensate a questo come una alternativa alla if then else fi (le parentesi graffe non sono solo necessarie, se si dispone di più comandi, ma mi piace comunque, per migliorare la leggibilità (in alcuni casi).

Fondamentalmente si tratta di

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

2021-11-22 11:37:38

Quando abc==100 e deb==1 anche voi volete chiamare discord.sh
Walter A

Sì, questo funziona per me: $([[ $deb -eq 1 ]] && echo 'INFO' || echo 'WARNING')
bivvo

vi ringrazio molto
bivvo
0

Vi prego di provare:

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

sembra molto buono, grazie!
bivvo

Ho dimenticato di rilasciare il echo comando per scopi di test. Ora fissa.
tshiono

vi ringrazio molto
bivvo
0

IMHO la risposta di @tshiono è il migliore. Tuttavia, diventa di difficile lettura/debug.
Perché non utilizzare un dettagliato soluzione?
Quando entrambe le condizioni sono vere, si desidera accedere con le INFORMAZIONI.

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

In altre lingue

Questa pagina è in altre lingue

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