linux - 使用shell腳本將行附加到/ etc/hosts文件



bash ubuntu (4)

我有一個新的Ubuntu 12.04 VPS。 我正在嘗試編寫一個完成整個LAMP安裝的安裝腳本。 我遇到問題的地方是在/etc/hosts文件中附加一行。 我當前的hosts文件如下所示:

127.0.0.1       localhost Venus

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

我希望它看起來像這樣:

127.0.0.1       localhost Venus
192.241.xx.xx  venus.example.com venus

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

我使用append( \a )命令嘗試了各種sed命令。 出於某種原因,Ubuntu要么只是回顯終端中hosts文件的內容,要么根本不做任何事情。 如何使用bash腳本將第二行正確注入文件?

https://ffff65535.com


插入/更新條目

如果你想使用bash以編程方式插入/更新主機條目,這是我寫的一個腳本:

#!/bin/bash

# insert/update hosts entry
ip_address="192.168.x.x"
host_name="my.hostname.example.com"
# find existing instances in the host file and save the line numbers
matches_in_hosts="$(grep -n $host_name /etc/hosts | cut -f1 -d:)"
host_entry="${ip_address} ${host_name}"

echo "Please enter your password if requested."

if [ ! -z "$matches_in_hosts" ]
then
    echo "Updating existing hosts entry."
    # iterate over the line numbers on which matches were found
    while read -r line_number; do
        # replace the text of each line with the desired host entry
        sudo sed -i '' "${line_number}s/.*/${host_entry} /" /etc/hosts
    done <<< "$matches_in_hosts"
else
    echo "Adding new hosts entry."
    echo "$host_entry" | sudo tee -a /etc/hosts > /dev/null
fi

該腳本旨在與OS X一起使用,但也可以在linux上進行微調。


你可以使用sed,如:

sed'/ Venus / a \
192.241.xx.xx venus.example.com venus'/ etc / hosts


我應該指出sed編輯器)實際上不是用於編輯文件,儘管它可以用來做。 ( 標準sed沒有用於寫入標準輸出以外的內置機制。)將使用更合適的工具。

下面的ed腳本說“找到包含(公認的馬虎)正則表達式/127.0.0.1/的行,並在下一行附加。” (唯一的一段時間告訴ed停止追加。)

ed /etc/hosts <<-'EOF'
    /127.0.0.1/a
    192.241.xx.xx  venus.example.com
    .
    wq
EOF

也就是說,您可以非常簡單地將此行附加到/ etc / hosts文件的末尾

echo '192.241.xx.xx  venus.example.com' >> /etc/hosts

確保使用sed-i選項。

-i[SUFFIX], --in-place[=SUFFIX]
  edit files in place (makes backup if extension supplied)

sed -i "2i192.241.xx.xx  venus.example.com venus" /etc/hosts

除此以外,

echo "192.241.xx.xx  venus.example.com venus" >> /etc/hosts

將該行附加到文件的末尾,這可以按預期工作。





sed