我正在做一个 zenity 形式以方便网络配置。最终用户只需填写信息,脚本就会完成其余的工作。
有一个更好的方法吗?
欢迎大家提出任何意见。
谢谢
sudo sed -i.bak '7,8 d' /etc/network/interfaces sudo sed -i '/inet 网络掩码/d' /etc/network/interfaces sudo sed -i '/inet nameservers/d' /etc/network/interfaces sudo sed -i '/inet 地址/d' /etc/network/interfaces sudo sed -i '/inet gateway/d' /etc/network/interfaces sudo sed -i“8a iface eth0 inet static”/etc/network/interfaces ip=$(zenity --entry --title="IP 地址" --text="IP 地址:") sudo sed -i "9a 地址 $ip" /etc/network/interfaces mask=$(zenity --entry --title="网络掩码" --text="网络掩码地址:") sudo sed -i "11a 网络掩码 $mask" /etc/network/interfaces gateway=$(zenity --entry --title="网关地址" --text="网关地址:") sudo sed -i "10a 网关 $gateway" /etc/network/interfaces dns=$(zenity --entry --title="Dns" --text="Dns 地址:") sudo sed -i "12a dns-nameservers $dns" /etc/network/interfaces sudo sed -i“13a iface eth1 inet static”/etc/network/interfaces sudo sed -i "14a 地址 $ip" /etc/network/interfaces sudo sed -i "15a 网关 $gateway" /etc/network/interfaces sudo sed -i "16a 网络掩码 $mask" /etc/network/interfaces sudo sed -i "17a dns-nameservers $dns" /etc/network/interfaces zenity --question --text "信息准确吗";回声$? 如果 [ $? > 0]; 然后 echo "--- 再做一次 ---" sudo cp home/Test/interfaces /etc/network/ #这会复制一个interfaces.bak #覆盖已更改的 睡眠3秒 出口 菲
现在我改成这样:
cp /etc/network/interfaces /tmp/interfaces
sed -i -e '7,8 d' \
-e '/inet address/d '\
-e '/inet netmask/d' \
-e '/inet nameservers/d' \
-e '/inet gateway/d' \
-e '/iface eth0 inet static/d' \
-e '/iface eth1 inet static/d' /tmp/interfaces
sudo sed -i "8a iface eth0 inet static" /tmp/interfaces
ip=$(zenity --entry --title="Ip adress" --text="Ip adress:")
sudo sed -i "9a address $ip" /tmp/interfaces
mask=$(zenity --entry --title="Netmask" --text="Netmask address:")
sudo sed -i "10a netmask $mask" /tmp/interfaces
gateway=$(zenity --entry --title="Gateway address" --text="Gateway address:")
sudo sed -i "11a gateway $gateway"/tmp/interfaces
dns=$(zenity --entry --title="Dns" --text="Dns address:")
sudo sed -i "12a dns-nameservers $dns" /tmp/interfaces
sudo sed -i "13a iface eth1 inet static" /tmp/interfaces
sudo sed -i "14a address $ip" /tmp/interfaces
sudo sed -i "15a gateway $gateway" /tmp/interfaces
sudo sed -i "16a netmask $mask" /tmp/interfaces
sudo sed -i "17a dns-nameservers $dns" /tmp/interfaces
wait 1s;
sudo zenity --text-info --height=500 --width=400 < <(cat /tmp/interfaces)
if ! zenity --question --text "Är alla addresser rätt ifyllda"; then
cp /tmp/interfaces /etc/network/interfaces
exit
fi
没有任何反应...文件没有任何变化..有帮助吗? :D
答案1
跑过脚本和
sudo
。不要为每个命令添加前缀sudo
.或者,/etc/network/interfaces
以非 root身份复制一份并对其进行处理,然后使用sudo
将其复制回原位。sed ...; sed ...; sed ...
可以替换为sed -e '...' -e '...' -e '...'
.$?
不需要进行测试。
所以你得到的是
cp /etc/network/interfaces /tmp/interfaces
sed -i -e '7,8 d' \
-e '/inet netmask/d' \
-e '/inet nameservers/d \
(etc.)
-e '8a iface eth0 inet static' /tmp/interfaces
(etc.)
if ! zenity --question --text "Is the information accurate"; then
...
fi