진단을 위한 bash 스크립트 작성에 대한 강의를 들어보세요.
제가 완전히 고민하고 있는 것은 특정 줄과 해당 줄 내의 텍스트 세그먼트만 캡처하는 방법입니다.
IE: ifconfig를 실행하면
[user@localhost ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.88.140 netmask 255.255.255.0 broadcast 192.168.88.255
inet6 fe80::fbaa:d42c:24db:dca7 prefixlen 64 scopeid 0x20
ether 00:0c:29:bc:c1:4d txqueuelen 1000 (Ethernet)
bash가 ipv4 주소의 2행, 12~27열을 $string으로 캡처하고 넷마스크, 브로드캐스트, mac 주소 및 ipv6 주소/cidr에 대해 동일한 작업을 계속 수행하기를 원합니다
. 이름 서버는solve.conf 파일에 있습니다.
그러면 물론 각 인터페이스마다 이 작업을 반복해야 합니다.
누군가가 더 나은 방법을 추천할 수 없다면 말이죠.
또한 IP 주소(및 기타 모든 것)를 변경하기 위해 ifcfg-ens33 파일에 $string을 삽입할 수 있는 방법이 있는지 궁금합니다. 아니면 파일을 완전히 다시 만드는 것이 더 나을까요?
이 정보를 이용하면 나머지 연습도 쉽게 완료할 수 있을 것 같아요
편집: 필드에 대해 뭔가를 해야 한다는 것을 알 수 있지만 $ipv41에 라인 2의 필드 2만 삽입하는 방법을 알아낼 수 있습니다.
EDIT2: 더 많은 내용을 읽은 후에 이 사실을 알아냈습니다. 하지만 지금까지는 출력을 변수에 넣을 수 없습니다. echo, printf, >, >>, >>>를 시도했습니다.
#import settings from ip command
#discover interface type into string
/sbin/ip -o -4 addr show up primary scope global| awk '{print $2}' | echo >
$if1
#discover interface ipaddress by interface type into strings
/sbin/ip -o -4 addr show $if1 | awk '{print $4}' | echo > $ipv4
/sbin/ip -o -4 addr show $if1 | awk '{print $6}' | echo > $bast
/sbin/ip -o -4 addr show $if1 | awk '{print $9}' | echo > $dhcp
/sbin/ip -o -6 addr show $if1 | awk '{print $4}' | echo > $ipv6
#print discovered info to screen
echo -e "---- Interface = $if1"
echo -e "---- DHCP Enabled? $dhcp"
echo -e "---- IPv4 Address = $ipv4"
echo -e "---- Broadcast = $bast"
답변1
head
음, 항상 , tail
및 가 있지만 cut
이것이 더 쉬울 수도 있습니다.
echo `ifconfig wlo1` |
{ read a b c d e inet f netmask g broadcast h inet6 i ; echo $inet $inet6 ; }
산출:
192.168.1.120 fe80::b400:3b2e:a40a:9f19
노트:
read
한 번에 변수 이름을 지정하고 설정하세요. 이것a b c d e
등.원치 않는 출력을 흡수하는 데 사용되는 더미 변수입니다ifconfig
.일단
}
실행되면 변수가 더 이상 존재하지 않습니다. 따라서 이러한 변수를 사용하는 모든 코드는 배치됩니다.앞으로이것}
.
답변2
이 시도:
ifconfig -a | tr -s ' ' | awk -F ' ' '{if (/^[a-z]/) printf $1 " "} {if (/inet /) print " " $3" "$5" "$7} {if (/ether/) print " " $2"}'