Bash shell scripting: condiționată de concatenare șir

0

Problema

Vreau să condiționat trimite un text într-un alt script de shell. Adică vreau să înlocuiți "AVERTIZARE", în cazul deb=1 cu "INFO":

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

Vreau, de asemenea, pentru a evita un alt complet DACĂ declarația. Mă aștept să avem ceva de genul

deb=1 ? "INFO" : "WARNING"

Asta funcționează? Dacă da, cum s-ar declarație completă arata ca? "--text ..."

Vă mulțumesc în avans.

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

Cel mai bun răspuns

0

Se poate face cu o serie de index pentru a se potrivi un numerice log-level cu un nume șir de caractere:

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

Ieșire:

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, idee destul de cool. vă mulțumesc foarte mult
bivvo

if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]] este adevărat atunci când abc==100 și deb==1. Când fix elimina echo.
Walter A
0

Adica ceva de genul asta?

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

Cred că de acest lucru ca o alternativă la if then else fi (cret paranteze sunt doar necesara, dacă aveți mai multe comenzi, dar îmi place să-l folosesc oricum, pentru lizibilitate (în unele cazuri).

Practic e

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

2021-11-22 11:37:38

Când abc==100 și deb==1 vrei, de asemenea, pentru a apela discord.sh
Walter A

Da, asta functioneaza pentru mine: $([[ $deb -eq 1 ]] && echo 'INFO' || echo 'WARNING')
bivvo

vă mulțumesc foarte mult
bivvo
0

Vă rog să încercați:

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

arata foarte bine, vă mulțumesc!
bivvo

Am uitat să renunțe la echo comanda pentru testarea scop. Acum fix.
tshiono

vă mulțumesc foarte mult
bivvo
0

IMHO răspunsul de @tshiono este cel mai bun. Cu toate acestea, devine greu de citit/debug.
De ce nu folosesti un verbose soluție?
Atunci când ambele condiții sunt adevărate, doriți să vă conectați cu INFO.

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

În alte limbi

Această pagină este în alte limbi

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