Take variable outside while loop


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Take variable outside while loop
# 1  
Old 06-25-2014
Take variable outside while loop

I have
Code:
# cat /root/nums
1
2
3

I need the variable inside while loop be able to use outisde while loop.

Code:
# cat /root/read.sh
#!/bin/bash

var="NONE"
cat /root/nums | while read entry
do
        var=`echo $entry`
        echo $var
done

echo $var

Result I get

Code:
# sh  /root/read.sh
1
2
3
NONE

What I NEED

Code:
# sh  /root/read.sh
1
2
3
3

# 2  
Old 06-25-2014
Your while is running in a subshell.

That's a useless use of cat anyway:
Code:
while read entry
do
        var=`echo $entry`
        echo $var
done < /root/nums

or if you want to do something a little more complex than cating a file, you could use process substitution:
Code:
while read entry
do
        var=`echo $entry`
        echo $var
done < <(grep something somefile)

# 3  
Old 06-25-2014
Code:
#!/bin/bash

var="NONE"
#cat nums | while read entry
while read entry
do
        export var=$entry
        echo $var
done<nums

echo $var

# 4  
Old 06-25-2014
You could also consider something like:
Code:
$!/bin/bash
var=$( [ -s /root/nums ] && tail -n 1 /root/nums || echo NONE )
printf '%s\n' "$var"

But, for small files, vbe's suggestion (with some added quotes) would faster:
Code:
#!/bin/bash
var="NONE"
while read -r entry
do
        var="$entry"
done</root/nums
printf '%s\n' "$var"

since this is only using shell built-ins.

I changed the echo to printf because the behavior of echo varies from shell to shell and system to system if the string to be printed starts with a minus sign (-) or contains a backslash character (\). And, if /root/nums is created by anything that is not under your direct control, you should be prepared to handle anything you might find there.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

[Solved] How to increment and add variable length numbers to a variable in a loop?

Hi All, I have a file which has hundred of records with fixed number of fields. In each record there is set of 8 characters which represent the duration of that activity. I want to sum up the duration present in all the records for a report. The problem is the duration changes per record so I... (5 Replies)
Discussion started by: danish0909
5 Replies

2. Shell Programming and Scripting

Array Variable being Assigned Values in Loop, But Gone when Loop Completes???

Hello All, Maybe I'm Missing something here but I have NOOO idea what the heck is going on with this....? I have a Variable that contains a PATTERN of what I'm considering "Illegal Characters". So what I'm doing is looping through a string containing some of these "Illegal Characters". Now... (5 Replies)
Discussion started by: mrm5102
5 Replies

3. UNIX for Dummies Questions & Answers

Loop and variable not exactly variable: what's wrong

Hello guys, This truly is a newbie question. I'm trying to make a loop to execute simultaneous commands indefinitely while using variable. Here is how my mess looks like (this is just an example): #!/bin/bash IP=`shuf -n 1 IP.txt` # I figured this would be easier to select random lines... (4 Replies)
Discussion started by: bobylapointe
4 Replies

4. Shell Programming and Scripting

printing variable with variable suffix through loop

I have a group of variables myLINEcnt1 - myLINEcnt10. I'm trying to printout the values using a for loop. I am at the head banging stage since i'm sure it has to be a basic syntax issue that i can't figure out. For myIPgrp in 1 2 3 4 5 6 7 8 9 10; do here i want to output the value of... (4 Replies)
Discussion started by: oly_r
4 Replies

5. Shell Programming and Scripting

[SHELL: /bin/sh] For loop using variable variable names

Simple enough problem I think, I just can't seem to get it right. The below doesn't work as intended, it's just a function defined in a much larger script: CheckValues() { for field in \ Group_ID \ Group_Title \ Rule_ID \ Rule_Severity \ ... (2 Replies)
Discussion started by: Vryali
2 Replies

6. Shell Programming and Scripting

For loop with one variable as the name of other

Hello all, I find it hard to explain what I need so I will post the code OVZINCLUDE="16810 16811 1689" PLUS_16810="test" PLUS_16811="test" for VPS in $OVZINCLUDE do echo "Dumping VPSes: $OVZINCLUDE " vzdump --compress --snapshot ${PLUS_$VPS} $VPS done ... (2 Replies)
Discussion started by: click
2 Replies

7. Shell Programming and Scripting

Help with variable using loop

Hi I have webserver that I do read data from. Data are stored like this: Huston |1 Portland |2 Hazen |1 Minneapolis |4 Albany |1 Pittsburg |1 Albany |1 Huston |1 Portland|1 Hazen |2 Albany |2 Huston |1 Hazen |1 Script #!/bin/sh user="admin" (1 Reply)
Discussion started by: Jotne
1 Replies

8. Shell Programming and Scripting

For loop Variable

Hi, Is it possible to assign one variable to other. eg. v1="table1" v2="20000" I want table1 to assign 20000 table1=20000 Is there any way? Thanks (2 Replies)
Discussion started by: SushilM
2 Replies

9. Shell Programming and Scripting

loop through variable

i have these data in a variable "$test" BUNGA TERATAI 3 5055 ITH 1 1 JADE TRADER 143W ITH 4 4 MOL SPLENDOR 0307A ITH 3 3 the red coloured are the ones that i want to take and compare what I need to do is to take out the red coloured and then compare to another variable, if same then... (0 Replies)
Discussion started by: finalight
0 Replies

10. Shell Programming and Scripting

variable in a for loop

Hi... i am trying to ping my servers .The hostnames are present in a file .They are separated by spaces in the file . i am doing the following : a=1 for name in $(cat host2 |cut -d" " -f$a) do echo Pinging server $name ping -c5 $name a=$a+1 done It is... (3 Replies)
Discussion started by: sars
3 Replies
Login or Register to Ask a Question