1

我需要一些有关 bash 功能的帮助。虽然我已经问过一个类似的问题,但我自己写这个还是很傻。

我的问题

我想将用户通过 read -p 给定的域或子域写入 /etc/hosts 文件。

域应添加到文件中特定 ip 的后面。IP 存储在变量 $secondadapter 中,$secondadapter 变量作为全局变量存储在 /etc/profile.d/file.sh 中,因此每个用户都可以访问它。

我不熟悉 grep 和 sed 或 awk 所以我的功能失败了。这是我写的

writetohostsfile(){
hosts_file=/etc/hosts
if ! grep -q '$domain' "${hosts_file}" ; then
grep -F '${secondadapter}' "${hosts_file}" | echo -n " $domain"
else
echo "This domain already exists!"
fi  
}

欢迎任何帮助和任何链接以了解 grep 和 sed。

4

2 回答 2

1

更新。这应该足够大胆以使其发挥作用。

#!/bin/bash

read -p "Enter domain name: " domain

# . <(exec grep ^secondadapter= /etc/profile.d/file.sh)  ## Uncomment if the variable was not yet exported.

if [[ $secondadapter =~ ^[0-9]+\.[0-9]+.[0-9]+.[0-9]+$ ]]; then
    if grep "^$secondadapter[[:space:]]\+[^#]\+" /etc/hosts >/dev/null; then
        exp="s/^\(${secondadapter//./\\.}[[:space:]]\+[^#]\+\)/\1 $domain/"
        sed -i "$exp" /etc/hosts
    else
        echo "$secondadapter $domain" >> /etc/hosts
    fi
else
    echo "Value of \$secondadapter is invalid: $secondadapter"
fi
于 2013-09-20T16:59:40.720 回答
1

这会将域添加到匹配行/etc/hosts

sed -i.bak "/^$secondadapter[ \t]/s/$/ $domain/" /etc/hosts
于 2013-09-20T17:00:33.073 回答