Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

incorrect file reading in bash

Posted on 2016-09-25
7
Medium Priority
?
185 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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 29

Accepted Solution

by:
Dr. Klahn earned 2000 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
NFR key for Veeam Agent for Linux

Veeam is happy to provide a free NFR license for one year.  It allows for the non‑production use and valid for five workstations and two servers. Veeam Agent for Linux is a simple backup tool for your Linux installations, both on‑premises and in the public cloud.

 
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 20

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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

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

How to remove superseded packages in windows w60 or w61 installation media (.wim) or online system to prevent unnecessary space. w60 means Windows Vista or Windows Server 2008. w61 means Windows 7 or Windows Server 2008 R2. There are various …
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…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…

715 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