Как насчет того, чтобы добавить это к /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
.
На будущее: Установка
перед запуском кода показала бы проблему. Вместо того, чтобы добавлять это в код, вы можете вызвать свой скрипт с помощью
whereis - locate the binary, source, and manual page files for a command
Работает на меня.[117228]
Это сработает. Каждое сообщение после вопросительного знака печатается на
stderr
и родительская оболочка [1171664] умирает.[1171665] Ну, ладно, так что не каждое сообщение [1171666]- только одно - только первое, которое не может напечатать сообщение, потому что оболочка умирает. Мне нравится использовать эти тесты вот так:
у меня было много чего сказать об этом [1171668] здесь [1171669].[1171308].
в начало вашего сценария, чтобы он завершился, когда он пытается использовать переменную unset.
Такой сценарий, как
приведет к
script.sh: 3: script. sh: foo: параметр не установлен
Если вместо него вы используете [117603]bash[117604], ошибка будет выглядеть следующим образом:
script.sh: строка 3: foo: unbound variable
Решение, которое максимально дружелюбно, проверяет все требования и сообщает о них вместе, вместо того, чтобы терпеть неудачу при первом и требовать возвратно-поступательного движения, чтобы все было правильно:
#!/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
, поэтому он не передается по конвейеру нижестоящим командам Я расширил ответ @ 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 на альтернативное имя, которое лучше подходит для желаемого результата.