실습 Bash 스크립트

실습 Bash 스크립트

진단을 위한 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"}'

관련 정보