사용자에게 네트워크 세부 정보를 요청하는 스크립트를 만들고 이를 Ubuntu 20.04에서 구현하려면 어떻게 해야 합니까?

사용자에게 네트워크 세부 정보를 요청하는 스크립트를 만들고 이를 Ubuntu 20.04에서 구현하려면 어떻게 해야 합니까?

두 개의 스크립트가 필요합니다. 첫 번째는 네트워크 정보를 수집하고 두 번째는 해당 정보를 사용하여 네트워크 계획 구성을 생성하고 적용합니다. 쉘 스크립트만을 사용하여 이를 달성하고 싶습니다.

스크립트는 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

관련 정보