Require input in bash dialog box


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Require input in bash dialog box
# 1  
Old 03-18-2017
Require input in bash dialog box

Hello.

Any help would be greatly appreciated.

Right now I have the following input box that works fine and well, however I would like to wrap this is a loop that requires input. Right now the script will happily continue on if the user just hits enter. I'd like to require a minimum of a 5 digit number or n/a or N/A as the only viable options otherwise you should get prompted to re-enter information.

Code:
DIALOG=${DIALOG=dialog}
$DIALOG --title "RFC NUMBER" --clear \
        --inputbox "Please enter an RFC Number" 16 17 2> $rfcfile

retval=$?
rfcval=`cat $rfcfile`

case $retval in
  0)
    echo RFC Number: "$rfcval" >> $accessfile;;
  1)
    exit 1;;
  255)
    rm -rf $accessfile && rm -rf $tempfile && rm -rf $rfcfile && rm -rf $sitefile && exit 1;;
  esac

# 2  
Old 03-18-2017
EDIT: First version didn't do the input loop, sorry - fixed now.

----------
Hi,

Would something like this do the trick for you ?

Code:
#!/bin/bash
validinput=0

while [ "$validinput" != "1" ]
do
        echo "Please enter an RFC number"
        read rfcnumber

        case $rfcnumber in
                "")
                        echo Either type in your RFC number, or enter N/A if one is unavailable.
                        ;;
                N/A)
                        echo You have indicated an RFC number is not available.
                        validinput=1
                        ;;
                *)
                        if echo "$rfcnumber" | /bin/grep -E "^[0-9]{5,}$" >/dev/null 2>/dev/null
                        then
                                echo Valid RFC number entered.
                                validinput=1
                        else
                                echo "Invalid RFC number entered"
                                echo "Please enter a minimum of five digits only, or N/A if you don't have one"
                        fi
                        ;;
        esac
done

echo "You provided the following valid input:"
echo $rfcnumber

(You could keep using dialog here, I just used the builtin read for my own convenience when writing this).

Here's a sample session, showing it ony accepting input that conists of solely digits, and a minimum of five of them. It will keep prompting the user to enter an RFC until a valid one is provided.

Code:
$ ./script.sh
Please enter an RFC number

Either type in your RFC number, or enter N/A if one is unavailable.
Please enter an RFC number
N/A
You have indicated an RFC number is not available.
You provided the following valid input:
N/A
$ ./script.sh
Please enter an RFC number
123
Invalid RFC number entered
Please enter a minimum of five digits only, or N/A if you don't have one
Please enter an RFC number
ABC
Invalid RFC number entered
Please enter a minimum of five digits only, or N/A if you don't have one
Please enter an RFC number
a12345
Invalid RFC number entered
Please enter a minimum of five digits only, or N/A if you don't have one
Please enter an RFC number
12345a
Invalid RFC number entered
Please enter a minimum of five digits only, or N/A if you don't have one
Please enter an RFC number
1234-567
Invalid RFC number entered
Please enter a minimum of five digits only, or N/A if you don't have one
Please enter an RFC number
123456
Valid RFC number entered.
You provided the following valid input:
123456

Hope this helps. If this isn't quite right let me know and I'll see if I can tweak it.

Last edited by drysdalk; 03-18-2017 at 12:37 PM..
# 3  
Old 03-18-2017
Perhaps something like this, you'll get the idea

Code:
trap clear EXIT
DIALOG=${DIALOG=dialog}
while :
do
  rfcval=$($DIALOG --title "RFC NUMBER" --clear \
          --inputbox "Please enter an RFC Number" 16 17 2>&1 >/dev/tty)
  retval=$?
  case $retval in
    0)
      case $rfcval in
        N/A|n/a)
          exit 0 ;;
        [!0-9])
          : ;;
        *[0-9][0-9][0-9][0-9][0-9]*)
          echo "RFC Number: $rfcval" >> $accessfile
          exit 0;;
      esac ;;
    1)
      exit 1;;
    255)
      rm -f "$accessfile" "$tempfile" "$sitefile"
      exit 1 ;;
  esac
done

This User Gave Thanks to Scrutinizer For This Post:
# 4  
Old 03-19-2017
Perfect...Thank you.

---------- Post updated at 11:40 PM ---------- Previous update was at 09:12 PM ----------

One more issue I'm encountering is trying to limit the regex a bit more.

I want to require a minimum of 15 characters but this code below does not work. The loop continues.
I've tried all of the following to no avail, however if I test these in an if statement they work.
*^[a-zA-Z0-9_]{15,}$*)
*[a-zA-Z0-9_]{15,}*)
*[a-zA-Z0-9_]\{15,\}*)
*^[a-zA-Z0-9_]\{15,\}$*)

Code:
  case $retval in
    0)
      case $reasonval in
        *^[a-zA-Z0-9_]{15,}$*)
         echo Reason for System Access: $reasonval >> $accessfile
          exit 0 ;;
      esac ;;

# 5  
Old 03-19-2017
Hi, case statements cannot use regular expressions, they use pattern matches, which have a different syntax.

Since there is no specification in this thread of what shell is going to be used, this is the best option, because a case statement works in any POSIX shell or even Bourne shell.

If your shell supports regex (modern Bash, ksh93, zsh) then you could do this (using the original example):

Code:
trap clear EXIT
DIALOG=${DIALOG=dialog}
while :
do
  rfcval=$($DIALOG --title "RFC NUMBER" --clear \
          --inputbox "Please enter an RFC Number" 16 17 2>&1 >/dev/tty)
  retval=$?
  case $retval in
    0)
      if [[ $rfcval =~ ^[0-9]{5,}$ ]]; then
        echo "RFC Number: $rfcval" >> $accessfile
        break
      elif [[ $rfcval =~ ^(N/A|n/a)$ ]]; then
        break
      fi ;;
    1)
      exit 1;;
    255)
      rm -f "$accessfile" "$tempfile" "$sitefile"
      exit 1 ;;
  esac
done
exit 0

-- edit --
Just noticed the thread title mentions bash, oh well Smilie ...

Last edited by Scrutinizer; 03-19-2017 at 06:18 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 6  
Old 03-19-2017
Thanks again!!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Dynamic Bash Dialog from directory listing

Hey! I want to get a directory listing and turn it into a bash dialog menu. I need to append information from the files themselves (they'll be text files) onto the actual filenames as well. I want to feed the appended filename list into the dialog menu as options. I need to make a case... (5 Replies)
Discussion started by: shrout1
5 Replies

2. Shell Programming and Scripting

Dialog box in korn shell scripting

Does dialog box works on all kind of shells? I am using korn shell in Linux . For me dialog is not working :) is there any particular syntax or do we need to have particular OS version or shell env? #!/bin/ksh dialog --title "create file" \ --backtitle "shell script practice" \... (1 Reply)
Discussion started by: NarayanaPrakash
1 Replies

3. UNIX for Dummies Questions & Answers

Dialog box

I know, I can run dialog command in my machine. But what I want to do is I wanna show the dialog box to some other Remote host. I connected to the remote system and used dialog command its shows the box in my terminal only. How can I display to that remote machine?? Any suggestions??? (3 Replies)
Discussion started by: Adhi
3 Replies

4. Shell Programming and Scripting

How to create multiple input box in same window using dialog

Hi All, I was trying to generate GUI using shell script. After long search I found the utility called “dialog”. Using this utility I am able to generate window to collect the input. dialog --inputbox "Input 1" 10 45 dialog --inputbox "Input 2" 10 45 dialog --inputbox "Input 3" 10 45 Using... (2 Replies)
Discussion started by: kalpeer
2 Replies

5. Red Hat

Authentication Failed Dialog Box on Redhat 4.7

For some reason i cannot login using root or other accounts on my Linux system. When logging in at the main console it says "Authentication failed" in a dialog box with an OK button. The Linux system is Redhat 4.7. I've already checked /etc/pam.d/login, /etc/security/access.conf and ... (27 Replies)
Discussion started by: redhatuser2012
27 Replies

6. Shell Programming and Scripting

Script to display a dialog box every 5 seconds

I want to create a script that displays a dialog box every interval of time and exits that loop when a user presses ENTER Any idies? (4 Replies)
Discussion started by: amitlib
4 Replies

7. Debian

Dialog box in debconf file.

Hi all, I am working with debconf file for packaging the projects. I have used the ". /usr/share/debconf/confmodule" file to do the packaging in debian standard. It worked fine. When ever I am installing the package in apt-get the dialogs are come as I mentioned in the templates file.... (0 Replies)
Discussion started by: Nila
0 Replies

8. Shell Programming and Scripting

Unix / Linux Dialog Utility - how to open 2+ more dialog windows ?

Hi, example of Unix / Linux dialog utility is below. I am going to use dialog as simple GUI for testing of a modem. So I need to combine some dialog boxes into one. I need to have input box, output box, info box, dialog box, radiobox as in any standard program with graphical user... (2 Replies)
Discussion started by: jack2
2 Replies

9. Shell Programming and Scripting

Pop up dialog box on remote computers

I need to send out messages to over 100 clients in my sector. I want it to pop up a dialog box letting them know to save work and log out. I have the reboot script created just need the warning please. Thanks (35 Replies)
Discussion started by: deaconf19
35 Replies

10. Shell Programming and Scripting

Displaying a dialog box using terminal commands

Hello, I used the command osascript -e 'tell app "Finder" to display dialog "Hey!"' to display a dialog box..it works fine, it displays a dialog box with 'OK' and 'CANCEL' buttons..i want to get the button returned value how can i do that using terminal command? is there any command to get... (1 Reply)
Discussion started by: keshav.murthy@r
1 Replies
Login or Register to Ask a Question