練習 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列を$文字列としてキャプチャし、ネットマスク、ブロードキャスト、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

  • 一度}実行すると、変数はもう存在しません。したがって、これらの変数を使用するすべてのコードは配置されます。今後これ}

おすすめ記事