Bash
如何製作腳本以向使用者詢問網路詳細資訊然後在 Ubuntu 20.04 中應用這些腳本?
我需要兩個腳本,一個用於收集網路資訊,另一個用於使用該資訊創建和應用網路計劃配置。我想只使用 shell 腳本來實現這一點。
該腳本應該簡單地詢問 IP、子網或 CIDR、網關和 2 個 DNS 伺服器 IP。同時,它應該驗證使用者輸入的資訊。
第二個腳本是創建一個netplan 編碼。這是一個 yaml 文件,可用於配置網路,收集自如何在 Ubuntu 20.04 LTS - LinuxTechi 上分配靜態 IP 地址。範例文件,
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
這可以做到嗎?有人可以幫忙嗎?我想用它來自動安裝Ubuntu 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"
我仍在努力,我被困得非常糟糕,不知道我是否做對了。
#!/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