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
459 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

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
linux redhat 7.2 10 89
Linux boot cd to do hardware report on PC? 3 59
Like to learn Linux, need advice for a good book and setup. 3 55
UNIX Script. Send email if failure 8 32
Over the years I've spent many an hour playing on hardened, DMZ'd servers, with only a sub-set of the usual GNU toy's to keep me company; frequently I've needed to save and send log or data extracts from these server back to my PC, or to others, and…
Active Directory replication delay is the cause to many problems.  Here is a super easy script to force Active Directory replication to all sites with by using an elevated PowerShell command prompt, and a tool to verify your changes.
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…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

856 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