Shell bash scripting: condicional de la concatenación de cadenas

0

Pregunta

Quiero condicionalmente presentar un texto en otro script de shell. Significado quiero reemplazar "ADVERTENCIA" en el caso de que 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

También quiero evitar por completo SI la instrucción. Espero tener algo como

deb=1 ? "INFO" : "WARNING"

Hace que el trabajo? Si sí, ¿cómo sería la declaración completa parece? "- el texto ..."

Gracias de antemano.

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

Mejor respuesta

0

Se puede hacer con un índice de matriz para que coincida con un número de registro de nivel con una cadena de nombre de:

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

Salida:

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, genial idea. muchas gracias
bivvo

if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]] es cierto cuando abc==100 y deb==1. Cuando se fija quitar el echo.
Walter A
0

Te refieres a algo como esto?

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

Piense en esto como una alternativa a la if then else fi (los corchetes son sólo necesario si usted tiene más comandos, pero me gusta usarlo de todas formas, para mejorar la legibilidad (en algunos casos).

Básicamente se trata de

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

2021-11-22 11:37:38

Cuando abc==100 y deb==1 usted también desea llamar discord.sh
Walter A

Sí, este me funciona: $([[ $deb -eq 1 ]] && echo 'INFO' || echo 'WARNING')
bivvo

muchas gracias
bivvo
0

Por favor, ¿puedes probar:

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

se ve muy bueno, gracias!
bivvo

He olvidado a la caída de la echo comando para el propósito de realizar la prueba. Ahora fijo.
tshiono

muchas gracias
bivvo
0

En mi humilde opinión la respuesta de @tshiono es la mejor. Sin embargo, se hace difícil de leer/debug.
¿Por qué no utilizar un detallado solución?
Cuando ambas condiciones son verdaderas, que desea iniciar la sesión con la 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

En otros idiomas

Esta página está en otros idiomas

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