我需要一些bash函数的帮助。虽然我已经问了一个类似的问题,但我仍然愚蠢地自己写这个。
我的问题
我想写一个用户通过read -p给/ etc / hosts文件给出的域或子域。
应该在文件中的特定IP后面添加域。 IP存储在varvalle $ secondadapter中,$ secondadapter var作为全局变量存储在/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的好帖子的链接。
答案 0 :(得分: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
答案 1 :(得分:1)
这会将域添加到匹配行/etc/hosts
:
sed -i.bak "/^$secondadapter[ \t]/s/$/ $domain/" /etc/hosts