Bash : While Loop behavior


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Bash : While Loop behavior
# 1  
Old 02-12-2015
Bash : While Loop behavior

Good Morning

I think there may be something I dont understand fully.

The following code works well, but I dont like the set domen method.

Code:
#!/bin/bash
#
domen="y"
while [ "$domen" == "y" ]
do
echo " M A I N - M E N U"
echo "1. Contents of /etc/passwd"
echo "2. List of users currently logged"
echo "3. Prsent handling directory"
echo "4. Exit"
echo "Please enter option [1-4] : "
read theopt
echo $theopt
case $theopt in
1) echo $opt;;
2) echo $opt;;
3) echo $opt;;
4) exit 0;;
*) echo "Bad opt";;
esac
done


So I looked in one of my books (Written by Chris FA Johnson) and on the web for a second example. The following doesnt work. You'll have to run it to see what I mean. Ill try to explain. As I run through the menu options to test, at one point or another, my option isnt read and the behavior is kind of like a back space. Even when using -n1 for read behavior was odd.


Code:
#!/bin/bash
#
while : 
do
echo " M A I N - M E N U"
echo "1. Contents of /etc/passwd"
echo "2. List of users currently logged"
echo "3. Prsent handling directory"
echo "4. Exit"
echo "Please enter option [1-4] : "
read theopt
echo $theopt
case $theopt in
1) echo $opt;;
2) echo $opt;;
3) echo $opt;;
4) exit 0;;
*) echo "Bad opt";;
esac
done

Chris' example does provide a function to do the reading of the options, but I want to understand whats going on here.

As usual thanks for the help !
Pop

Last edited by popeye; 02-12-2015 at 01:18 PM..
# 2  
Old 02-12-2015
In what way does it not work?


Code:
$ ./oneopt.sh
 M A I N - M E N U
1. Contents of /etc/passwd
2. List of users currently logged
3. Prsent handling directory
4. Exit
Please enter option [1-4] :
1
1

 M A I N - M E N U
1. Contents of /etc/passwd
2. List of users currently logged
3. Prsent handling directory
4. Exit
Please enter option [1-4] :
2
2

 M A I N - M E N U
1. Contents of /etc/passwd
2. List of users currently logged
3. Prsent handling directory
4. Exit
Please enter option [1-4] :
3
3

 M A I N - M E N U
1. Contents of /etc/passwd
2. List of users currently logged
3. Prsent handling directory
4. Exit
Please enter option [1-4] :
4
4

$

I see nothing wrong.
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 02-12-2015
I can't replicate the error that you report. Did you consider bash's select builtin?
This User Gave Thanks to RudiC For This Post:
# 4  
Old 02-12-2015
I just realized something. By 'backspace' do you mean 'goes to the beginning of the line'? Your file may have carriage returns in it. What have you been editing it with?
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 02-12-2015
I'd "double quote" the $variables so the script does not fail for all whitespace in or shell sensitive characters.

You read 'theopt' but echo 'opt', which is never set.

Usually ':' prompts have no linefeed, like: 'echo "Please enter option [1-4] : \c"' or use the 'read -p prompt' option.
This User Gave Thanks to DGPickett For This Post:
# 6  
Old 02-12-2015
VERY INTERESTING !

Ive tried this on a VM at school, a Ubuntu VM on my latptop and a Centos VM on my laptop.

What happens on all is that as I run through and test each option, at one point it seems that the read doesnt except input. It really behave like a backspace, but what I suspect is happening is that read is executing again. Kind of ignores input.

PS Stumped the instructor too !!!

---------- Post updated at 01:13 PM ---------- Previous update was at 01:05 PM ----------

I just tried to execute it on a work VM ... shhh dont tell the boss. Its running on that vserver. What the heck ? Only difference is that Im using VMPLAYER on my laptop and at school. .... scratching my head. Technical problem between chair and keyboard ??
# 7  
Old 02-12-2015
We will not know exactly what you mean unless you copy-paste the output of it misbehaving.

Also, from earlier:

Quote:
Originally Posted by Corona688
Your file may have carriage returns in it. What have you been editing it with?
This User Gave Thanks to Corona688 For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Different behavior between bash shell and bash script for cmd

So I'm trying to pass certain json elements as env vars and use them later on in a script. Sample json: JSON='{ "Element1": "file-123456", "Element2": "Name, of, company written in, a very weird way", "Element3": "path/to/some/file.txt", }' (part of the) script: for s... (5 Replies)
Discussion started by: da1
5 Replies

2. Shell Programming and Scripting

Help on for loop in bash

Hi, In the code "for loop" has been used to search for files (command line arguments) in directories and then produce the result to the standard output. However, I want when no files are named on the command line, it should read a list of files from standard input and it should use the command... (7 Replies)
Discussion started by: Ra26k
7 Replies

3. UNIX for Advanced & Expert Users

unexpected behavior bash, set -o vi, history -a, and HISTFILE

I am trying to get my history in sync in multiple bash sections and things aren't working the way I expect. Desired behavior, hitting esc-K in all bash sessions (same userid and machine) will use the same history. Observed behavior: Esc-k shows the history of the current session, rather than... (8 Replies)
Discussion started by: gg48gg
8 Replies

4. UNIX for Advanced & Expert Users

Different redirection behavior in BASH/Linux when run under cron vice login ???

run_xfs_fsr is a xfs filesystem maintenance script designed to run under cron. The system is a home theater personal computer running mythbuntu 10.10, and is accessed remotely for these tests. cron runs a script, (xfs_fsr.sh) at 02:30 that runs the subject script under BASH and sets the... (3 Replies)
Discussion started by: keepitsimpleeng
3 Replies

5. Red Hat

BASH command not found strang behavior

Hi all I am relatively new to linux (specifically red hat). I have installed Fedora 13 on my machine and started playing with the terminal when i found a very strange behavior when typing a command that is not found: the terminal does not prompt me back. In other words, i am logged as root (or... (4 Replies)
Discussion started by: abohmeed
4 Replies

6. Shell Programming and Scripting

BASH loop inside a loop question

Hi all Sorry for the basic question, but i am writing a shell script to get around a slightly flaky binary that ships with one of our servers. This particular utility randomly generates the correct information and could work first time or may work on the 12th or 100th attempt etc !.... (4 Replies)
Discussion started by: rethink
4 Replies

7. Shell Programming and Scripting

Using variables created sequentially in a loop while still inside of the loop [bash]

I'm trying to understand if it's possible to create a set of variables that are numbered based on another variable (using eval) in a loop, and then call on it before the loop ends. As an example I've written a script called question (The fist command is to show what is the contents of the... (2 Replies)
Discussion started by: DeCoTwc
2 Replies

8. Shell Programming and Scripting

BASH quoting behavior

The block below isn't a surprise:$ ls file1 file2 file3 $ x=* $ echo $x file1 file2 file3 $ echo '$x' $x $ echo "$x" * $But I found this block a bit bewildering:$ echo $x' >' * $I'm wondering why substitution wasn't performed on the $x, since it was unquoted (as far as I can tell).... (5 Replies)
Discussion started by: na5m
5 Replies

9. Shell Programming and Scripting

bash and ksh: variable lost in loop in bash?

Hi, I use AIX (ksh) and Linux (bash) servers. I'm trying to do scripts to will run in both ksh and bash, and most of the time it works. But this time I don't get it in bash (I'm more familar in ksh). The goal of my script if to read a "config file" (like "ini" file), and make various report.... (2 Replies)
Discussion started by: estienne
2 Replies

10. Shell Programming and Scripting

Mimic bash history behavior

Does anyone know of a way to mimic the up arrow/down arrow type bash behavior within a shell script? Say I have a scripted menu, and would like to be able to up arrow to bring up the last X number of lines of user input? Thanks to anybody with a suggestion. :) (0 Replies)
Discussion started by: sysera
0 Replies
Login or Register to Ask a Question