Using arrays in bash using strings to bash built-in true


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using arrays in bash using strings to bash built-in true
# 15  
Old 03-28-2012
You're always so fast, and I have a habit of editing in minor fixes later. Check my post again.

Code:
[ ! -z "$1" ]

vs
Code:
[ ! -z "${!1}" ]

# 16  
Old 03-28-2012
Quote:
Originally Posted by Corona688
I don't think you need any of them at all. You can tell if the variables are blank, why waste more variables storing things you can tell without them?

Also -- just set your defaults in the first place, and let the script change them later if they're given.

Code:
OLDIFS="$IFS"
IFS="|="                # IFS controls splitting. Split on "|" and "=", not whitespace.
set -- $*               # Set the positional parameters to the command line arguments.
IFS="$OLDIFS"

# Just set the default in the first place.
value_cmodIfl="$dflt_cmodIfl"

while [ "$#" -gt 0 ]
do
  case "$1" in

  "--"[cC][mM][oO][dD]|\
  "--"[cC][mM][oO][dD]"-"[iI][fF][lL])
    shift
    value_cmodIfl="$1"
  ;;

  "--"[sS][rR][cC][sS]|\
  "--"[sS][rR][cC][sS]"-"[iI][fF][lL])
    shift
    value_srcsIfl="$1"
  ;;

  "--"[rR][cC][vV][sS]|\
  "--"[rR][cC][vV][sS]"-"[iI][fF][lL])
    shift
    value_rcvsIfl="$1"
  ;;

  *)
    value_bdFileLst="$value_bdFileLst $1"
  ;;

  esac

  shift                 # Skip ahead to the next argument

done

if [ ! -z "$value_rcvsIfl" ]
then
        echo "rcvsIfl given"
fi


I agree with you. One problem is that some defaults require the use of mandatory values defined by the user, so I cannot put them all at the beginning. The result was that some defaults occurred in the beginning and some after the while loop. This used to be ok, but when amount of options got larger, it seems a good idea to group them all after the while loop.

---------- Post updated at 01:16 PM ---------- Previous update was at 01:08 PM ----------

Quote:
Originally Posted by Corona688
I think functions may be helpful to you in simplifying your code, and making it look better to you. In BASH and some KSH you can do this:

Code:
function isset # varname
{
        [ -z "${!1}" ]
}

function notset # varname
{
        [ ! -z "${!1}" ]
}

if isset VARIABLE # Note the lack of $
then
        echo "VARIABLE is set, its value is $VARIABLE"
fi

if notset VARIABLE
then
        echo "VARIABLE is not set"
fi

Seems to work now with the following modifications
Code:
function isSet
{
    [ ! -z "${!1}" ]
}

function notSet
{
    [ -z "${!1}" ]
}

# 17  
Old 03-28-2012
If you have lots and lots of optional, default, and mandatory values, you can do something like this:

Code:
# File listing variables and default values
# Mandatory value causes error if not set, printing errormessage from file
var1 mandatory errormessage
# Optional variable gets set to defaultvalue when absent
var2 optional defaultvalue
var3 optional defaultvalue
var4 optional defaultvalue

Code:
while read VAR TYPE STR
do
        [ -z "$VAR" ] && continue # Skip blank lines
        [ "${VAR:0:1}" = "#" ] && continue # Skip comments

        case "$TYPE" in
        mandatory)
                if [ -z "${!VAR}" ] # Blank variable is an error
                then
                        echo "$VAR not set:  $STR"
                        exit
                fi
                ;;

        *)        # If blank, set default
                   # <<< is a BASH-only syntax.
                   [ -z "${!VAR}" ] && read VAR <<<"$STR"
                ;;
        esac
done < variablefile


Last edited by Corona688; 03-28-2012 at 03:26 PM..
# 18  
Old 03-28-2012
Quote:
Originally Posted by Corona688
If you have lots and lots of optional, default, and mandatory values, you can do something like this:

Code:
# File listing variables and default values
# Mandatory value causes error if not set, printing errormessage from file
var1 mandatory errormessage
# Optional variable gets set to defaultvalue when absent
var2 optional defaultvalue
var3 optional defaultvalue
var4 optional defaultvalue

Code:
while read VAR TYPE STR
do
        [ -z "$VAR" ] && continue # Skip blank lines
        [ "${VAR:0:1}" = "#" ] && continue # Skip comments

        case "$TYPE" in
        mandatory)
                if [ -z "${!VAR}" ] # Blank variable is an error
                then
                        echo "$VAR not set:  $STR"
                        exit
                fi
                ;;

        *)        # If blank, set default
                   # <<< is a BASH-only syntax.
                   [ -z "${!VAR}" ] && read VAR <<<"$STR"
                ;;
        esac
done < variablefile

Having a bit of difficulty seeing where this fits in.

I use the script in the following way:

Code:
cd testPath
/thePath/script.bash/raytrac.bash --cmod=file.cmod

In this case the program will search in directory testPath for files
Code:
.srcs and .rcvs

Other options, for example:
Quote:
nameOfl
This is either set by the user using --nameOfl=name or take the name of the cmod file (call it cmodName) to create the
Code:
raysOfl="cmodName.ry" and trvtOfl="cmodName.xt"

# 19  
Old 03-28-2012
That won't do what you want then, no.
# 20  
Old 03-28-2012
I do not want the user to input the options interactively. The idea is that the user sets up a script with the sequence of operations he wants (run scripts and C++ programs), run the script, and no user requests are ever done. He then waits for the script to finish. In the meantime, he can check and do some analysis of the results as the sequence progresses.
# 21  
Old 03-28-2012
My script wasn't interactive.

It was just one way to do a loop, so instead of doing a million lines of "if this variable is blank, then set that default" you repeat one loop a million times on different values.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

bc,getopt and arrays in bash

trying to sum elements in an array using bc and getopt,i have a file with names and thier vaules if the names appears 3 times i should multiply its value with 3 then find the sum of all the elements together cat foo.txt max 2.3 henry 3 fransis 4.5 max 2.3 henry 3 max 2.3 it should... (1 Reply)
Discussion started by: elginmulizwa
1 Replies

2. Shell Programming and Scripting

How to make arrays from strings in bash?

Hey all, This is my first post, and I am relatively new to linux/unix scripts. I am writing a bash script in which I am trying to extract one line from another file and parse specific words from the line into an array. So for example, I have a file called SortScans in which the first 5 lines... (9 Replies)
Discussion started by: camocazi
9 Replies

3. Shell Programming and Scripting

bash built-in

Is there any command or VARIABLE in unix to display only bash builtin commands?. Some days back I worked on that, but now I do not remember. Can anyone please reply for this?... (4 Replies)
Discussion started by: gwgreen1
4 Replies

4. Shell Programming and Scripting

Yet another bash arrays question

Hi all, I have a file that contains many lines, but only a few are of my interest, so I'm cutting it with grep + awk, and the result I get is for example line 0 line 1 line 2 line 3 line n Now I want to store each line in an array "cell" so I can use it later calling to ${array},... (2 Replies)
Discussion started by: TuxSax
2 Replies

5. Shell Programming and Scripting

subtraction in bash arrays

hi i am using bash shell to perform some subraction. here is what i have: i have a while loop and am using i as a counter. diff= `expr ${ARRAY1} - ${ARRAY2}` for example array1 has -0.7145 and array2 has -0.7041. when i try the above command, i get expr: non-numeric argument. any... (6 Replies)
Discussion started by: npatwardhan
6 Replies

6. Shell Programming and Scripting

arrays in bash

hi guys, i have the following script and when i run it i get blank lines on the screen.. i am trying to display the contents of array var.. #!/usr/bin/bash var=`awk 'NR>20&&NR<31' try.sum | awk '{print $4}'` echo "${var}" (1 Reply)
Discussion started by: npatwardhan
1 Replies

7. Shell Programming and Scripting

Searching Bash Arrays

Hi, I am writing a bash shell script. I would like to execute a statement only if an array contains a specific value. For example: array=(1 3 5 7) I would like to execute the statement only if the value 3 is present in ${array}. Thanks for any help, Mike (1 Reply)
Discussion started by: msb65
1 Replies

8. Shell Programming and Scripting

Arrays in bash.need help

:confused: Is it possible to delete array elements dynamically.For instance,consider an array( a b c d ) ,now can i delete array (the third element 'c').So that the array becomes array(a b d).. Thanks in advance!! (1 Reply)
Discussion started by: tj23
1 Replies

9. Shell Programming and Scripting

comparing two arrays or strings in bash

Hi there, im having issue with comparing two variables, in a bash script. im trying to do the following: - get a word from user 1 - split the word into array - get a character from user2 trying to compare the character entered by user 2 with every single character in the array... (2 Replies)
Discussion started by: new2Linux
2 Replies

10. Shell Programming and Scripting

Bash: Exiting while true loop when terminal is not the focus window

I am running an Ubuntu Gutsy laptop with Advanced Compiz fusion options enabled. I am using xdotool to simulate keyboard input in order to rotate through multiple desktops. I am looking for a way to kill a while true loop when the Enter key (or Control+C if it is easier) is pushed when the... (2 Replies)
Discussion started by: acclaypool
2 Replies
Login or Register to Ask a Question