Solved

incorrect file reading in bash

Posted on 2016-09-25
7
81 Views
Last Modified: 2016-10-24
Hi Experts.

I'm writing an automated Script in Bash, and I've got into a bit of a block...
I have a file called /scripts/resources/nodes,txt
The file currently hold only three lines:

10.5.17.3
10.5.17.4
10.5.17.5

and I have the following code:
#!/usr/bin/bash
filename="/scripts/resources/nginx_nodes_list.txt"
while read -r line
do
     NodeIP=$line
     echo "server $NodeIP {" >> /scripts/testloop.txt
done < "$filename"

Open in new window


However, when I run the scripts and cat the resulting file, I only see 2 lines:

server 10.5.17.3 {
server 10.5.17.4 {
meaning the scipt skips the last one, any idea why?
0
Comment
Question by:David Sankovsky
7 Comments
 
LVL 35

Expert Comment

by:Terry Woods
ID: 41814595
When I set up a test doing the same thing, it worked.

Try double checking your input data just to make sure everything is actually as you say:
cat /scripts/resources/nodes,txt

Open in new window

and your output (you may want to empty the output file first and rerun the script, since it's appending each time):
cat /scripts/testloop.txt

Open in new window

0
 
LVL 24

Accepted Solution

by:
Dr. Klahn earned 500 total points
ID: 41814613
Suggest:  Dump the file in hex and ASCII to confirm there are no hidden control characters.
0
 
LVL 40

Expert Comment

by:omarfarid
ID: 41815276
try read without -r option.

Also, try to run script with bash -x and see what you get. It will show you each command while executing the script
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 40

Expert Comment

by:omarfarid
ID: 41815277
What happen if you add one more line to the file?
0
 
LVL 40

Expert Comment

by:omarfarid
ID: 41836343
David,

Your feedback is awaited.
0
 
LVL 19

Expert Comment

by:simon3270
ID: 41836595
You get this if the last line of the file does not have a carriage return (lots of things seem to do this, including some IDEs and Windows editors).

One thing you could try is:
grep . "$filename" | while read -r line
do
     NodeIP=$line
     echo "server $NodeIP {" >> /scripts/testloop.txt
done

Open in new window

A drawback with this is that any variables set within the loop are no longer set outside the loop.  If, for example, you had a counter within the loop which you incremented for each line, that value would be lost when the loop finished.  If you need such a value, write it to a file within the loop, then read the file outside.
0
 
LVL 7

Author Closing Comment

by:David Sankovsky
ID: 41856735
I had hidden characters... rookie mistake.. Thanks for the help
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Have you ever been frustrated by having to click seven times in order to retrieve a small bit of information from the web, always the same seven clicks, scrolling down and down until you reach your target? When you know the benefits of the command l…
Recently, an awarded photographer, Selina De Maeyer (http://www.selinademaeyer.com/), completed a photo shoot of a beautiful event (http://www.sintjacobantwerpen.be/verslag-en-fotoreportage-van-de-sacramentsprocessie-door-antwerpen#thumbnails) in An…
Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
Both in life and business – not all partnerships are created equal. As the demand for cloud services increases, so do the number of self-proclaimed cloud partners. Asking the right questions up front in the partnership, will enable both parties …

895 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now