Solved

Need Part of a Bash Script take input/generate array of menu choices/take user selection/appoint value...

Posted on 2009-04-08
5
444 Views
Last Modified: 2013-12-26
I have inherited a task to complete a deployment script -

It needs to query the user for a string in order to narrow down the choices of directories that were ftp or scp up to the server.

Based on the user input a partial directory list is returned of a local directory with the matching string request - this partial (or say full return if a very broad search (like just the letter a for example) needs to return to the user as input choices - aka like

1 - directory1
2 - directory2
3 - directory3

the array choices also need to be able to handle spaces and linux allowable special characters in the name


0
Comment
Question by:prestonhill
  • 2
  • 2
5 Comments
 
LVL 6

Expert Comment

by:letharion
ID: 24096555
0
 
LVL 7

Expert Comment

by:Morne Lategan
ID: 24097552
You can use the dialog utility if its available on your system. Most system's come pre-installed with it, but you can install it if its not already there. An alternative would be whiptail which is more lightweight.

Lets say the directories are in /home/upload. That is:

/home/upload/dir1
/home/upload/dir2

etc

Here's a code snippet from the dialog utility program's examples
#!/bin/sh

exec 3>&1

FILE=`dialog --title "Please choose a directory" --dselect /home/upload/ 14 48 2>&1 1>

&3`

code=$?

exec 3>&-
 

case $code in

  0)

    echo "\"$FILE\" chosen";;

  1)

    echo "Button 1 (Cancel) pressed";;

  2)

    echo "Button 2 (Help) pressed";;

  3)

    echo "Button 3 (Extra) pressed";;

  255)

    echo "Box closed.";;

esac

Open in new window

0
 

Author Comment

by:prestonhill
ID: 24097902
I was starting down the dialogue path - I need to get it installed on the RedHat system this script needs to run on though (not available but should not be a problem) - I am going to check out whiptail - I haven't looked at it before.
0
 
LVL 7

Accepted Solution

by:
Morne Lategan earned 500 total points
ID: 24098513
If you don't have dialog, how about:
#!/bin/bash

OLDIFS="$IFS"

IFS=$'\n'

done=no

validoptions=""

while [ "$done" != "yes" ]

do

        i=0

        clear

        echo "Please select a directory:"

        echo

        for DNAME in $(find . -maxdepth 1 -type d | sed "s?^./??" | grep -v "^\.")

        do

                i=$(($i + 1))

                opt[$i]="$DNAME"

                echo "$i. $DNAME"

        done

        echo -en "Select Option [ ]\b\b"

        read ans

        if [ "x$ans" \< "x1" -o "x$ans" \> "x$i" ]

        then

                echo "Invalid Option. Enter 1 to $i."

                echo "Press ENTER."

                read

        else

                done=yes

        fi

done

echo "You selected: \"${opt[ans]}\""

IFS="$OLDIFS"

Open in new window

0
 

Author Comment

by:prestonhill
ID: 24105970
Thanks uberpappa - that was enough of a bit of code to get me going on what I needed.
0

Featured Post

Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

Question has a verified solution.

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

Suggested Solutions

How many times have you wanted to quickly do the same thing to a list but found yourself typing it again and again? I first figured out a small time saver with the up arrow to recall the last command but that can only get you so far if you have a bi…
Over the last ten+ years I have seen Linux configuration tools come and go. In the early days there was the tried-and-true, all-powerful linuxconf that many thought would remain the one and only Linux configuration tool until the end of times. Well,…
Learn how to navigate the file tree with the shell. Use pwd to print the current working directory: Use ls to list a directory's contents: Use cd to change to a new directory: Use wildcards instead of typing out long directory names: Use ../ to move…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.

863 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

23 Experts available now in Live!

Get 1:1 Help Now