Тест, если несколько переменных установлены

Как насчет того, чтобы добавить это к /etc/network/interfaces?

для DHCP:

auto eth0
iface eth0 inet dhcp

или для помех:

auto eth0
iface eth0 inet static
        address 192.168.1.1
        netmask 255.255.255.0
gateway 192.168.1.254

Я предполагаю, что Ваша сетевая плата работает, и драйвер правильно загружается, проверьте его с lspci или просто с grep eth0 /proc/net/dev.

19
23.05.2017, 15:40
9 ответов
[117219] Ошибка цитирования.

На будущее: Установка

перед запуском кода показала бы проблему. Вместо того, чтобы добавлять это в код, вы можете вызвать свой скрипт с помощью

  whereis  -  locate the binary, source, and manual page files for a command

8
27.01.2020, 19:45
[117225] Единственное, что вам нужно - это кавычки в вашем тесте:

Работает на меня.[117228]

4
27.01.2020, 19:45
[1171303] Если вы хотите, чтобы программа была остановлена:

  Это сработает. Каждое сообщение после вопросительного знака печатается на 

stderr


и родительская оболочка [1171664] умирает.[1171665] Ну, ладно, так что не каждое сообщение [1171666]- только одно - только первое, которое не может напечатать сообщение, потому что оболочка умирает. Мне нравится использовать эти тесты вот так:

у меня было много чего сказать об этом [1171668] здесь [1171669].[1171308].

4
27.01.2020, 19:45
[117251]Вы можете добавить

в начало вашего сценария, чтобы он завершился, когда он пытается использовать переменную unset.

Такой сценарий, как

приведет к

script.sh: 3: script. sh: foo: параметр не установлен

Если вместо него вы используете [117603]bash[117604], ошибка будет выглядеть следующим образом:

script.sh: строка 3: foo: unbound variable

2
27.01.2020, 19:45
[117229] Я думаю, если вы имеете в виду [117583] не устанавливать [117584], то переменная никогда не должна быть инициализирована. Если использовать [117585][ -n "${!var}" ][117586], то пустая переменная типа [117587]two="[117588] будет неудачной, в то время как [117589] set[117590]. Вы можете попробовать следующее:

1
27.01.2020, 19:45
[115021] Краткий (хотя и слегка халтурный) раствор, для обработки случая, когда для скрипта [115647]source[115648]d нормально устанавливать переменные в нулевое значение, это инициализировать переменные каким-то специальным значением перед использованием скрипта, а затем проверять на это значение, например

0
27.01.2020, 19:45
[12198]bash[1171930] 4.2 позволяет проверить, установлена ли переменная с помощью оператора [1171931]-v[1171932]; переменная unset и переменная, установленная на пустую строку - это два разных условия:[12199]
1
27.01.2020, 19:45

Решение, которое максимально дружелюбно, проверяет все требования и сообщает о них вместе, вместо того, чтобы терпеть неудачу при первом и требовать возвратно-поступательного движения, чтобы все было правильно:

#!/bin/bash

required_vars=(one two three)

missing_vars=()
for i in "${required_vars[@]}"
do
    test -n "${!i:+y}" || missing_vars+=("$i")
done
if [ ${#missing_vars[@]} -ne 0 ]
then
    echo "The following variables are not set, but should be:" >&2
    printf ' %q\n' "${missing_vars[@]}" >&2
    exit 1
fi

Я использую переменную массива для отслеживания какие переменные не были установлены, и используйте результат для составления сообщения для пользователя.

Примечания:

  • Я цитировал $ {required_vars [@]} в цикле for в основном по привычке - я бы не советовал включать какие-либо метасимволы оболочки в вашу переменную. имена!
  • Я не цитировал $ {# missing_vars [@]} , потому что это всегда целое число, даже если вы достаточно извращены, чтобы игнорировать предыдущий совет.
  • Я использовал % q при печати; % s обычно бывает достаточно.
  • Вывод ошибок всегда направляется в поток ошибок с > & 2 , поэтому он не передается по конвейеру нижестоящим командам
  • Тишина - это золото - не печатайте информацию о ходе выполнения или отладочную информацию, если специально не попросили . Это делает ошибки более очевидными.
2
27.01.2020, 19:45

Я расширил ответ @ mikeserv .

Эта версия принимает список переменных, наличие которых необходимо проверить, выводит имя отсутствующей переменной и запускает вызов usage () в случае ошибки.

REQD_VALUES=("VARIABLE" "FOO" "BAR" "OTHER_VARIABLE")
( i=0; for var_name in ${REQD_VALUES[@]}; do
    VALUE=${!var_name} ;
    i=$((i+1)) ; : ${VALUE:?$var_name is missing}
done ) || usage

Пример вывода, когда значение отсутствует:

./myscript.sh: line 42: VALUE: OTHER_VARIABLE is missing

Обратите внимание, что вы можете изменить переменную с именем VALUE на альтернативное имя, которое лучше подходит для желаемого результата.

0
27.01.2020, 19:45

Теги

Похожие вопросы