Read Strings in as options to switches


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Read Strings in as options to switches
# 1  
Old 02-11-2013
Read Strings in as options to switches

I have a script using getops with -a -t -l as potential switches, based on the switches used, it will set the respective variable value which will cause the routine/function to run. I need to also pass a string with the switch that will get parsed by the function.

Code:
example
./myscript -a apples,oranges,pears -t ham,pastrami,bologna

while getops atl OPTION
do
case $OPTION in
a) AVAR=ACTIVE ;;
t) TVAR=ACTIVE ;;
esac
done

if [ $AVAR ]
then
read in string "apples,oranges,pears"
etc...

if [$TVAR]
then
read in string "ham,pastrami,bologna"

I need help to pass the strings that follow the switches in to the blocks that apply to those switches. I don't want an interactive script, I need to pass everything as args.
# 2  
Old 02-11-2013
I haven't seen that getopt actually makes shell code any simpler...

Code:
while [ "$#" -gt 0 ]
do
        case "$1" in
        -a)   AVAR=ACTIVE
                ASTR=$2
                shift
                ;;
        -t) TVAR=ACTIVE
              TSTR=$2
              shift
        --)  shift ; break ;;
        -*)  echo "Unknown option" >&2
              exit 1
              ;;
        *) break ;;
        esac

        shift
done


echo "AVAR $AVAR ASTR $ASTR"
echo "TVAR $TVAR TSTR $TSTR"

Code:
$ ./script.sh -a abcd,efg,hij -t def,gh,jkl

This User Gave Thanks to Corona688 For This Post:
# 3  
Old 02-11-2013
That is a great idea, thanks. There is a chance that both switches will be used, each with a string passed to them, and that they can be passed out of order. I can use this logic, but I will have to account for a being $3 and t being $1 or whatever, but it will still work. I also agree, getops seems to be almost not worth using, it's often as simple to just write some logic to handle the args.
# 4  
Old 02-11-2013
Actually, this already accounts for it. See the shift statements. They remove the first argument and move everything down. That's why I can just check $1 every loop.

i.e. if $1=a, $2=b, $3=c, after you do shift, you get $1=b, $2=c.

There's an extra shift in the flags that take arguments to keep the loop in sync.
This User Gave Thanks to Corona688 For This Post:
# 5  
Old 02-11-2013
I see now, thanks!
# 6  
Old 02-11-2013
Good one, but if you want to give getopts another try:
Code:
# cat myscript 
#!/usr/bin/ksh

while getopts "a:t:" opt
do
   case "${opt}" in 
    a) AVAR=ACTIVE 
       string_avar="${OPTARG}" ;;
    t) TVAR=ACTIVE 
       string_tvar="${OPTARG}" ;;
   esac
done

if [ "${AVAR}." != "." ] 
then
   echo "string_avar: ${string_avar}"
fi

if [ "${TVAR}." != "." ] 
then
   echo "string_tvar: ${string_tvar}"
fi

Code:
# ./myscript -a apples,oranges,pears -t ham,pastrami,bologna
string_avar: apples,oranges,pears
string_tvar: ham,pastrami,bologna

# 7  
Old 02-11-2013
Hi.

With some work, one can use features of ksh93s+ getopts to accept many variations, and even to produce a man page for the script automatically. See https://www.unix.com/shell-programmin...topts-ksh.html , post 7 for examples.

Best wishes ... cheers, drl (92)
Login or Register to Ask a Question

Previous Thread | Next Thread

8 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script to read multiple options from file, line by line

Hi all I have spent half a day trying to create a shell script which reads a configuration file on a line by line basis. The idea of the file is that each will contain server information, such as IP address and various port numbers. The line could also be blank (The file is user created). Here... (1 Reply)
Discussion started by: haggismn
1 Replies

2. Shell Programming and Scripting

how to read strings from a txt and put them into a spreadsheet?

i have hundreds of thousands of txt files as below, RADARSAT 1 SCENE DESCRIPTION SCENE_ID c0005098 MDA ORDER NUMBER GEOGRAPHICAL AREA CIS ScanSar Canada SCENE START TIME APR 02 1997 23:05:10.222 SCENE STOP TIME APR 02 1997 23:02:49.695... (5 Replies)
Discussion started by: sunnydanniel
5 Replies

3. Shell Programming and Scripting

echo switches

Hello All, I am writing an shell script but abruptly its not able to recognize switches in echo statement. #!/bin/bash top -n 1 -b>ankit host=`hostname` time=`cat ankit|grep load|tr -s " "|cut -d " " -f3` load=`cat ankit|grep load|tr -s " "|cut -d "," -f4|cut -d ":" -f2` ... (3 Replies)
Discussion started by: ajaincv
3 Replies

4. Shell Programming and Scripting

Read file and remove special characters or strings

Hello all I am getting data like col1 | col2 | col3 asdafa | asdfasfa | asf*&^sgê 345./ |sdfasd23425^%^&^ | sdfsa23 êsfsfd | sf(* | sdfsasf My requirement is like I have to to read the file and remove all special characters and hex characters ranging form 00-1f from 1st column, remove %"'... (1 Reply)
Discussion started by: vasuarjula
1 Replies

5. Solaris

Boot options - DVD drive read error

I was wondering if there was a way to boot from openboot from the dvd drive. I was thinking about imaging the dvd to a blank drive and going about it that way. I just need to do a flash install. (5 Replies)
Discussion started by: adelsin
5 Replies

6. Shell Programming and Scripting

use strings in case statement options

I iterate in string list well but when I try to add a case statement in order to wrap the string value in a more accurate message I faced different problems. #Code starts ST_CODES="CN CU BU CQ LE" for ST_CODE in $ST_CODES do #echo $ST_CODE CODE="$ST_CODE""\n" ... (3 Replies)
Discussion started by: fdiaza
3 Replies

7. Shell Programming and Scripting

Read from a file and use the strings in a loop

Hello all, I need some help to create a script which contain a few strings on every line, and use those strings in a loop to fire some commands. for exmaple the file looks like tom dave bill andy paul I want to read one line at a time and use it in loop like command tom command dave... (3 Replies)
Discussion started by: xboxer21
3 Replies

8. UNIX for Advanced & Expert Users

Tar switches!!!

Hi, If i want to write my data on several tapes, (more than one tape), what switch(s) i need to use with tar. In other word if my data needs the sapce more than one tape & i don't wanna to compress or ... my data. so is it possible to write up to the end of the tape & it asks to put another... (1 Reply)
Discussion started by: nikk
1 Replies
Login or Register to Ask a Question