how to modify /etc/hosts from shell scripts?

Solution 1:

Take a look at augeas. It has a ready-made parser/serializer for the hosts file (that's even in their quick tour guide) and comes with a simple tool to make changes (augtool).

Solution 2:

I'd rather not touch /etc/hosts in terms of parsing and such. I'd simply create a directory called /etc/hosts.d/ and make up some script that takes:

  • ip
  • name
  • aliases

creates one (1) file with one (1) line. The filename will be <ip>.host and then cat /etc/hosts.d/*host > /tmp/hosts.new && mv /tmp/hosts.new /etc/hosts. Maybe add an incron event that watches the /etc/hosts.d/ directory and regenerates /etc/hosts whenever something happens, that way you'll get rid of old entries too.