实验室的 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 执行相同操作...
也执行相同操作以获取任何名称服务器在resolve.conf 文件中。

然后我当然必须对每个接口重复此操作......

除非有人能推荐更好的方法来做到这一点。

我还想知道是否有办法可以将 $string 插入 ifcfg-ens33 文件来更改 IP 地址(以及其他所有内容),或者我最好完全重新创建该文件吗?

我认为有了这些信息我应该能够很容易地完成剩下的练习

编辑:我可以看到我需要对字段做一些事情,但我可以弄清楚如何让它只将第 2 行的字段 2 插入 $ipv41

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,tailcut,但这可能更容易:

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 ETC。是用于吸收不需要的ifconfig输出的虚拟变量。

  • 一旦}运行,变量就不再存在。因此,放置使用这些变量的任何代码}

答案2

尝试这个:

ifconfig -a | tr -s ' ' | awk -F ' ' '{if (/^[a-z]/) printf  $1 " "} {if (/inet /) print " " $3" "$5" "$7} {if (/ether/) print " " $2"}'

相关内容