Reading lines in a file and avoiding lines with # with Bash

It's safer to use [[ "$line" = "\#*" ]]

Btw, address="\\${line}\\127.0.0.1"

UPD:

If I've understand you right you need to change every uncommented domains to address=\domain\127.0.0.1. It could be done fast and easy with sed, there is no need in bash-program.

$> cat ./text
domain1.com
domain2.com
domain3.com
#domain4.com
domain5.com

$> sed -r -e 's/(^[^#]*$)/address=\/\1\/127.0.0.1/g' ./text2
address=/domain1.com/127.0.0.1
address=/domain2.com/127.0.0.1
address=/domain3.com/127.0.0.1
#domain4.com
address=/domain5.com/127.0.0.1

If you need to remove commented lines, sed can do it too with /matched_line/d

$> sed -r -e 's/(^[^#]*$)/address=\/\1\/127.0.0.1/g; /^#.*$/d' ./text2 
address=/domain1.com/127.0.0.1
address=/domain2.com/127.0.0.1
address=/domain3.com/127.0.0.1
address=/domain5.com/127.0.0.1

UPD2: if you want to do all that stuff inside the bash script, here is your code modification:

file="./text2"
while read -r line; do
    [[ "$line" =~ ^#.*$ ]] && continue
    echo "address=/${line}/127.0.0.1"
done < "$file"

And it's output:

address=/domain1.com/127.0.0.1
address=/domain2.com/127.0.0.1
address=/domain3.com/127.0.0.1
address=/domain5.com/127.0.0.1

[ "${line:0:1}" = "#" ] && continue

This takes the string, gets the substring at offset 0, length 1:

"${line:0:1}"

and checks if it is equal to #

= "#"

and continues looping if so

&& continue

http://www.tldp.org/LDP/abs/html/string-manipulation.html


To skip lines starting with #:

grep -v '^#' myfile | while read -r file ; do
    ...
done

Modify the grep command as needed to, for example, skip lines starting with whitespace and a # character.


Comment lines can and often do begin with whitespace. Here's a bash native regex solution that handles any preceeding whitespace;

while read line; do
  [[ "$line" =~ ^[[:space:]]*# ]] && continue
  ...work with valid line...
done