我需要两个脚本,第一个脚本用于收集网络信息,第二个脚本用于使用该信息创建和应用网络规划配置。我想仅使用 shell 脚本来实现这一点。
该脚本应该只询问 IP、子网或 CIDR、网关和 2 个 DNS 服务器 IP。同时,它应该验证用户输入的信息。
第二个脚本是创建 netplan 编码。这是一个可用于配置网络的 yaml 文件,收集自如何在 Ubuntu 20.04 LTS 上分配静态 IP 地址 - LinuxTechi。示例文件,
network:
ethernets:
enp0s3:
addresses: [192.168.1.3/24]
gateway4: 192.168.1.1
nameservers:
addresses: [4.2.2.2, 8.8.8.8]
version: 2
这可以做到吗?有人可以帮忙吗?我想将它用于自动安装乌班图20.04
以下是我正在研究的内容,我知道它并不完整,并且可能是一种非常错误的方法,但这就是我需要帮助的原因:P
- -壳
#!/bin/bash
nmcli device status | awk '{print $1}' | sed '1d' | sed '$d' > /tmp/itic-ls-networks
echo "None" >> /tmp/itic-ls-networks
sum3="cat /tmp/itic-ls-networks"
nmcli device status | awk '{print $1}' | sed '1d' | sed '$d' | wc -l > /tmp/itic-total-networks
sum1=$(cat /tmp/itic-total-networks)
sum2=`expr $sum1 + 1`
var1=1
for sum2 in $var1
do
nmcli device status | awk '{print $1}' | sed '1d' | sed '$d' | sed 's/^/ '$var1') /' >> /tmp/itic-networks
done
Please enter the IP Address
read itic-ip-cidr
num = `expr match $itic-ip-cidr [.]`
if num != 3
then
echo "please enter the correct IP v4 address & the CIDR Value"
我仍在努力,但我陷入了困境,不知道我做得是否正确。
答案1
#!/bin/bash
echo -n "Enter IP Address: "
read ip
valid_ip=0
if [[ "$ip" =~ ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ ]]; then
echo "Valid IP: $ip";
valid_ip=1;
else
echo "Invalid IP: $ip";
fi
echo -n "Read CIDR: "
read cidr
valid_cidr=1
if [[ "$cidr" =~ ^[0-9]+$ && "$cidr" -le 32 ]]; then
echo "Valid CIDR: $cidr";
valid_cidr=1;
else
echo "Invalid CIDR: $cidr";
fi
#If both are valid, print them out in the form ip/cidr
if [[ "$valid_ip" -eq 1 && $valid_cidr -eq 1 ]]; then
echo "Valid"
echo "$ip/$cidr"
fi
网关和 DNS 与 IP 相同,只是增加了一个新变量。
拥有所有变量后,打印 netplan 部分的 yaml 文件就很容易了。
IP 的正则表达式从这里开始,https://stackoverflow.com/questions/5284147/validating-ipv4-addresses-with-regexp