Я бы разбил его на отдельные функции, что позволило бы мне проверить подключение к Wi-Fi перед перенастройкой сети.
#!/usr/bin/env bash
CONF="/etc/wpa_supplicant/wpa_supplicant.conf"
function connect_wifi() {
wpa_supplicant -B -i wlan0 -c $CONF >/dev/null 2>&1
}
function connect_tcpip() {
service ntp restart
ip link set dev wlan0 down
ip link set dev wlan0 up
dhclient wlan0
}
FUNC_CW=$(declare -f connect_wifi)
FUNC_CT=$(declare -f connect_tcpip)
if (sudo bash -c "$FUNC_CW; connect_wifi"); then
sudo bash -c "$FUNC_CT; connect_tcpip"
else
echo "Error Connecting to Wifi. Please check your credentials and try again."
fi
Если вы не возражаете против использования нескольких шагов, вы можете сделать это полностью с помощью bash
встроенных -модулей
x='final old-version=1.2.3-old new-version=1.2.4'
oldnew=${x#* } # "old-version=1.2.3-old new-version=1.2.4"
old=${oldnew% *} # "old-version=1.2.3-old"
new=${oldnew#* } # "new-version=1.2.4"
oldversion=${old#*=} # "1.2.3-old"
newversion=${new#*=} # "1.2.4"
echo "Old version is >$oldversion<"
echo "New version is >$newversion<"
В качестве двух примеров операторов #
и %
${x#* }
удаляет строку, совпадающую с шаблоном *{space}
, из начала строки $x
. ${oldnew% *}
удаляет строку, совпадающую с glob {space}*
, из конца строки Вот еще одна версия, значительно короче, с использованием массива для нарезки переменной $x
по пробелу
x='final old-version=1.2.3-old new-version=1.2.4'
oldnew=($x) # array ('final', 'old-version=1.2.3-old', 'new-version=1.2.4')
oldversion=${oldnew[1]#*=} # "1.2.3-old"
newversion=${oldnew[2]#*=} # "1.2.4"
echo "Old version is >$oldversion<"
echo "New version is >$newversion<"
с использованием оболочки bash и P.E. раскрытие и чтение параметров
x='final old-version=1.2.3-old new-version=1.2.4'
read -r _ old new <<< "$x"; printf '%s\n' "${old#*=}" "${new#*=}"
или используя массив с опцией -a
из чтения.
x='final old-version=1.2.3-old new-version=1.2.4'
read -ra var <<< "$x"; printf '%s\n' "${var[1]#*=}" "${var[2]#*=}"