Попробуйте:
# nmcli con add con-name "static-ens32" ifname ens32 type ethernet ip4 xxx.xxx.120.44/24 gw4 xxx.xxx.120.1
# nmcli con mod "static-ens32" ipv4.dns "xxx.xxx.120.1,8.8.8.8"
# nmcli con up "static-ens32" iface ens32
Далее найдите другие соединения и удалите их. Например:
# nmcli con show
NAME UUID TYPE DEVICE
ens32 ff9804db5-........ 802-3-ethernet --
static-ens32 a4b59cb4a-........ 802-3-ethernet ens32
# nmcli con del ens32
При следующей перезагрузке нужно поднять соединение static-ens32
, так как оно единственное доступное.
Вам не нужно использовать bash
массив здесь (, но сделайте это, если вам так удобнее ).
Вот как это сделать для/bin/sh
:
#!/bin/sh
for arg do
shift
case "$arg" in
--my-long-flag)
set -- "$@" -m ;;
--another-flag)
set -- "$@" -a ;;
"-?"|--help)
usage
exit 0 ;;
--*)
printf 'Unrecognised long option: %s\n' "$arg" >$2
usage
exit 1 ;;
*)
set -- "$@" "$arg"
esac
done
Это чище, чем bash
решение массива (личное мнение ), так как не нужно вводить другую переменную. Это также лучше, чем автоматически сгенерированный код -, который вы показываете, так как он сохраняет каждый аргумент командной строки как отдельный элемент в "$@"
. Это хорошо, потому что это позволяет пользователю передавать аргументы, содержащие символы пробела, пока они заключены в кавычки (, чего не делает автоматически -сгенерированный код ).
Комментарии к стилю:
Приведенный выше цикл предназначен для преобразования длинных опций в короткие для повторения цикла getopts
позже. Таким образом, он отрывается от этой задачи, фактически воздействуя на некоторые опции, такие как -?
и --help
. ИМХО, вместо этого их следует перевести на-h
(или какой-нибудь подходящий короткий вариант ).
Он также выполняет перевод длинных опций за точку, где опции не должны приниматься . Вызов скрипта как
./script.sh --my-long-flag -- -?
не должен интерпретировать -?
как опцию из-за--
(означающего «здесь заканчиваются опции» ). Точно так же
./script.sh filename --my-long-flag
не должен интерпретировать --my-long-option
как опцию, поскольку разбор опций должен останавливаться на первой не -опции.
Вот вариант, учитывающий вышеизложенное:
#!/bin/sh
parse=YES
for arg do
shift
if [ "$parse" = YES ]; then
case "$arg" in
--my-long-flag)
set -- "$@" -m ;;
--another-flag)
set -- "$@" -a ;;
--help)
set -- "$@" -h ;;
--)
parse=NO
set -- "$@" -- ;;
--*)
printf 'Unrecognised long option: %s\n' "$arg" >$2
usage
exit 1 ;;
*)
parse=NO
set -- "$@" "$arg"
esac
else
set -- "$@" "$arg"
fi
done
Это не разрешает длинные опции с отдельными аргументами опции, например--option hello
(hello
будет рассматриваться как не -опция, а опция разбор закончится ). С чем-то вроде --option=hello
было бы довольно легко справиться, если немного повозиться.