0

コンピューター ラボ用の bash スクリプトを作成しています。通常、コンピューターを更新するときは、すべてのコンピューターのクローンを作成する単一のイメージを使用します。問題は、すべてのコンピューターが同じホスト名を取得することです。

そこで、PC の MAC アドレスを読み取り、表に従ってホスト名を変更する bash スクリプトを作成することにしました。

case ステートメントを使用していますが、別の構成ファイルを使用したいと考えています。どうやってやるの?

これはスクリプトです (不快なケースを参照してください)。

#!/bin/bash

if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo 'Errore, non sei root!'
    exit 1
else
        mac=$(cat /sys/class/net/eth0/address)
        basename='Lab121Pc'

        case $mac in
                'c8:9c:dc:d2:82:2c') id='01';;
                'c8:9c:dc:d2:81:f4') id='02';;
                'c8:9c:dc:d2:46:3e') id='03';;
                'c8:9c:dc:d2:82:33') id='05';;
                'c8:9c:dc:d2:81:96') id='06';;
                'c8:9c:dc:d2:83:55') id='07';;
                'c8:9c:dc:d2:2f:14') id='09';;
                'c8:9c:dc:d2:82:45') id='10';;
                'c8:9c:dc:d2:82:2f') id='11';;
                'c8:9c:dc:d2:51:2e') id='12Hp';;
                'c8:9c:dc:d2:7e:43') id='13';;
                'c8:9c:dc:d2:49:ba') id='14';;
                'c8:9c:dc:d2:81:f3') id='15';;
                'c8:9c:dc:d2:7e:3c') id='17';;
                'c8:9c:dc:d2:7e:33') id='18';;
                'c8:9c:dc:d2:83:62') id='19';;
                'c8:9c:dc:d2:4a:db') id='21';;
                'c8:9c:dc:d2:e3:d4') id='22Hp';;
                'c8:9c:dc:d2:7e:e7') id='23';;
                'c8:9c:dc:d2:b0:f4') id='24Hp';;
                'c8:9c:dc:d2:49:e8') id='25';;
                'c8:9c:dc:d2:82:31') id='26';;
                'c8:9c:dc:d2:81:2f') id='27';;
            'c8:9c:dc:d2:48:5c') id='28';;
            'c8:9c:dc:d2:81:e6') id='29';;
            'c8:9c:dc:d2:81:36') id='30';;
     esac

        hostname=$basename$id

        if [ $(cat /etc/hostname) == $hostname ]; then
                echo 'Hostname e'' gia'' corretto'
                exit 0
        else
                echo 'Hostname errato, correzzione in corso...'
                echo $hostname > /etc/hostname
                echo 'Aggiornamento riuscito'
                exit 0
        fi
fi

すべてに感謝します。私は Linux を使用しており、DHCP は使用できませんが、とにかくありがとうございます。ただし、cut コマンドを見つけたので、MAC アドレスを含む i ファイルを作成しました。

xx:xx:xx:xx:xx:xx 01
xx:xx:xx:xx:xx:xx 02
xx:xx:xx:xx:xx:xx 03
xx:xx:xx:xx:xx:xx 04
xx:xx:xx:xx:xx:xx 05

したがって、ファイルの行をスクロールしてからカットを使用できます

cut -d ' ' -f 1 macs 

区切り文字はスペースなので、MAC アドレスが必要な場合は -f 値を 1 に、ID が必要な場合は 2 にします。

4

1 に答える 1

2

ファイルを次のようにフォーマットする場合:

c8:9c:dc:d2:81:e6 29
c8:9c:dc:d2:81:36 30

次に、次のようなことができます。

id=$(grep "^$mac " | awk '{print $2}')

(しかし、私はあなたの質問に対するコメントに同意します。それを行う最善の方法は、DHCP を使用することです。)

于 2013-02-02T22:43:45.307 に答える