Сценарии оболочки bash: объединение условных строк

0

Вопрос

Я хочу условно отправить текст в другой сценарий оболочки. Это означает, что я хочу заменить "ПРЕДУПРЕЖДЕНИЕ" в случае, если deb=1, на "ИНФОРМАЦИЯ".:

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

Я также хочу избежать еще одного полного утверждения IF. Я ожидаю, что у меня будет что-то вроде

deb=1 ? "INFO" : "WARNING"

Это работает? Если да, то как будет выглядеть полное заявление? "...сообщение ..."

Заранее спасибо.

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

Лучший ответ

0

Можно сделать с помощью индекса массива, чтобы сопоставить числовой уровень журнала со строкой имени:

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

Выход:

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

э-э, довольно крутая идея. Большое спасибо!
bivvo

if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]] верно, когда abc==100 и deb==1. При исправлении удалите echo.
Walter A
0

Ты имеешь в виду что-то вроде этого?

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

Думайте об этом как об альтернативе if then else fi (фигурные скобки необходимы только в том случае, если у вас больше команд, но мне все равно нравится использовать их для удобства чтения (в некоторых случаях).

В основном это

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

2021-11-22 11:37:38

Когда abc==100 и deb==1 вы также хотите позвонить discord.sh
Walter A

Да, это работает на меня: $([[ $deb -eq 1 ]] && echo 'INFO' || echo 'WARNING')
bivvo

Большое спасибо!
bivvo
0

Не могли бы вы, пожалуйста, попробовать:

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

выглядит очень хорошо, спасибо!
bivvo

Я забыл уронить echo команда для целей тестирования. Теперь исправлено.
tshiono

Большое спасибо!
bivvo
0

ИМХО, ответ @tshiono лучше всего. Однако становится трудно читать/отлаживать.
Почему бы не использовать подробное решение?
Если оба условия верны, вы хотите войти в систему с ИНФОРМАЦИЕЙ.

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

На других языках

Эта страница на других языках

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