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
# 8  
Old 03-28-2012
Quote:
Originally Posted by kristinu
How about ksh? Can I use associative arrays without worry about using them?
How about trying what I suggested? Did it work, or did it not?

Quote:
Can one do the following in bash?
Code:
false=0
true=1

BASH is not C. I don't see any point in doing this. It's not going to make your code simpler. All you're going to do is make your code more and more complicated and strange.

Learn a tiny bit more about shell programming instead. Use variables as they're intended to be used. It looks unfamiliar to you because it's not familiar. Once you recognize it, it won't be.

What I would do is use bash's -z flag to tell if variables are empty. That way, you don't have to set a thousand different empty variables to zero -- just leave them blank. If they're still blank after processing options, then nobody set them.

Code:
case "$1" in
--something)
        SOMETHING=1
        ;;
esac

if [ ! -z "$SOMETHING" ]
then
        echo "Someone passed the --something option"
fi

This User Gave Thanks to Corona688 For This Post:
# 9  
Old 03-28-2012
You could also try Perl, which has associative arrays too, but I think that's just going to make it even more complicated.
# 10  
Old 03-28-2012
Quote:
Originally Posted by Corona688
How about trying what I suggested? Did it work, or did it not?

BASH is not C. I don't see any point in doing this. It's not going to make your code simpler. All you're going to do is make your code more and more complicated and strange.

Learn a tiny bit more about shell programming instead. Use variables as they're intended to be used. It looks unfamiliar to you because it's not familiar. Once you recognize it, it won't be.

What I would do is use bash's -z flag to tell if variables are empty. That way, you don't have to set a thousand different empty variables to zero -- just leave them blank. If they're still blank after processing options, then nobody set them.

Code:
case "$1" in
--something)
        SOMETHING=1
        ;;
esac

if [ ! -z "$SOMETHING" ]
then
        echo "Someone passed the --something option"
fi

I fully agree with you. I had ended up in the situation you describe, with the code getting too complicated. I was looking at removing the setting of lots of variables to zero.

Getting my code on this forum was a way to get input on the way forward. So thanks a lot for your contribution.

---------- Post updated at 12:38 PM ---------- Previous update was at 12:35 PM ----------

Quote:
Originally Posted by Corona688
You could also try Perl, which has associative arrays too, but I think that's just going to make it even more complicated.
Yes, I tried perl and got things more complicated. So abandoned the perl strategy.
# 11  
Old 03-28-2012
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


Last edited by Corona688; 03-28-2012 at 02:53 PM.. Reason: fixing small error
This User Gave Thanks to Corona688 For This Post:
# 12  
Old 03-28-2012
Here is an illustration. Unsure if I need to have
Quote:
hasArgument
anymore.

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

declare -A hasArgument

while [ "$#" -gt 0 ]
do

  case "$1" in

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

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

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

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

  esac

  shift                 # Skip ahead to the next argument

done

if [ ! -z "$value_cmodIfl" ]
then
   cmodIfl="$value_cmodIfl"
else
   cmodIfl="$dflt_cmodIfl"
fi

# 13  
Old 03-28-2012
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

# 14  
Old 03-28-2012
I am getting a bit of problems with the following.

Output shows

Code:
agr1 set to 
agr2 set to file.cmod

Code:
#!/bin/bash

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

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

agr2="file.cmod"

if isSet agr1; then
  echo "agr1 set to $agr1"
fi

if notSet agr1; then
  echo "agr1 not set"
fi

if isSet agr2; then
  echo "agr2 set to $agr2"
fi

if notSet agr2; then
  echo "agr2 not set"
fi

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