#bash #scripting #raspberry-pi #debian
Вопрос:
Я хочу условно отправить текст в другой сценарий оболочки. Это означает, что я хочу заменить «ПРЕДУПРЕЖДЕНИЕ» в случае, если 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"
Это работает? Если да, то как будет выглядеть полное заявление? «…сообщение …»
Заранее спасибо.
Ответ №1:
Можно сделать с помощью индекса массива, чтобы сопоставить числовой уровень журнала со строкой имени:
#!/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 gt; abc)) amp;amp; 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
Комментарии:
1. э-э, довольно крутая идея. Большое спасибо!
2.
if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]]
верно, когдаabc==100
иdeb==1
. При исправлении удалитеecho
.
Ответ №2:
Ты имеешь в виду что-то вроде этого?
[[ $abc -lt 98 ]] amp;amp; { ./discord.sh --webhook-url=$url --text "$([[ $deb -eq 1 ]] amp;amp; echo "INFO" || echo "WARNING"): $abc" }
Подумайте об этом как об альтернативе if
then
else
fi
(фигурные скобки необходимы только в том случае, если у вас больше команд, но мне все равно нравится использовать их для удобства чтения (в некоторых случаях).
В основном это
[[ condition ]] amp;amp; { commands if true } || { commands if false }
Комментарии:
1. Когда
abc==100
иdeb==1
вы также хотите позвонитьdiscord.sh
2. Да, это работает на меня:
$([[ $deb -eq 1 ]] amp;amp; echo 'INFO' || echo 'WARNING')
3. Большое спасибо!
Ответ №3:
Не могли бы вы, пожалуйста, попробовать:
if (( abc lt; 98 || deb == 1 )); then loglevel=$( (( deb == 1 )) amp;amp; echo "INFO" || echo "WARNING" ) ./discord.sh --webhook-url=$url --text "$loglevel: $abc" fi
Комментарии:
1. выглядит очень хорошо, спасибо!
2. Я забыл удалить
echo
команду для целей тестирования. Теперь исправлено.3. Большое спасибо!
Ответ №4:
ИМХО, ответ @tshiono лучше всего. Однако становится трудно читать/отлаживать.
Почему бы не использовать подробное решение?
Если оба условия верны, вы хотите войти в систему с ИНФОРМАЦИЕЙ.
if ((deb==1 )); then ./discord.sh --webhook-url="$url" --text "INFO: $abc" elif ((abc lt; 98)); then ./discord.sh --webhook-url="$url" --text "WARNING: $abc" fi