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
# 29  
Old 03-29-2012
While I agree with Corona688 that there are no booleans in shell, they can be emulated to some extent using the true and false built-ins if you put them in variables. This is something I found out myself at some point, and although I don't see this practice very often, I sometimes like to use it in my scripts, because I think it makes the code more mnemonic.
Code:
parameter_A_used=true parameter_B_used=false

if $parameter_A_used && $parameter_B_used; then
  echo "True"
else 
  echo "False"
fi

Code:
if $parameter_A_used && ! $parameter_B_used; then
  echo "True"
else
  echo "False"
fi

Code:
$ a=true b=false
$ if $parameter_A_used && $parameter_B_used; then   echo "True"; else    echo "False"; fi
False
$ if $parameter_A_used && ! $parameter_B_used; then   echo "True"; else    echo "False"; fi
True

What really happens here is that the shell built-ins inside these variables get executed and then produce a 1 or 0 return code.

You do need to be careful and disciplined that you only set these variables in your script itself and only to true or false for boolean purposes. Do not use variables that can contain user input or for example input from a file, because the content of these variables will get executed and there can be a security risk involved if you are careless with that.

Also, since true and false are built-ins, they can be overridden by shell functions, so you need to be aware of that also, like with any other utility of built-in that you use your script..

If you are not comfortable with this then use 0 and 1 values and test for that in [ ... ] statements.

Last edited by Scrutinizer; 03-29-2012 at 10:05 AM..
# 30  
Old 03-29-2012
Quote:
Originally Posted by Scrutinizer
While I agree with Corona688 that there are no booleans in shell, they can be emulated to some extent using the true and false built-ins if you put them in variables. This is something I found out myself at some point, and although I don't see this practice very often, I like to use it in my scripts, because I think it makes the code more mnemonic.
Code:
parameter_A_used=true parameter_B_used=false

if $parameter_A_used && $parameter_B_used; then
  echo "True"
else 
  echo "False"
fi

Code:
if $parameter_A_used && ! $parameter_B_used; then
  echo "True"
else
  echo "False"
fi

Code:
$ a=true b=false
$ if $parameter_A_used && $parameter_B_used; then   echo "True"; else    echo "False"; fi
False
$ if $parameter_A_used && ! $parameter_B_used; then   echo "True"; else    echo "False"; fi
True

What really happens here is that the shell built-ins inside these variables get executed and then produce a 1 or 0 return code.

You do need to be careful and disciplined that you only set these variables in your script itself and only to true or false for boolean purposes. Do not use variables that can contain user input or for example input from a file, because the content of these variables will get executed and there can be a security risk involved if you are careless with that.

If you are not comfortable with this then use 0 and 1 values and test for that in [ ... ] statements.
I fully understand what you mean. It was my purpose and was tending to your way of doing things. I originally was using the 0 and 1 thing, but when I was doing the checking I was using

Code:
 hasArgument=1
 if [ $hasArgument == 1 ]; then
   ...
 fi

The above is not a very good system if one wants to check if you have an argument or not,
as I always need to see if I had put a 0 or 1.

So you are saying that I can just use
Code:
hasArgument=1
if  $hasArgument; then
  ...
fi

The above is much better.
# 31  
Old 03-29-2012
No, that will not work. I meant:
Code:
hasArgument=true
if  $hasArgument; then
  ...
fi

And you do need to be disciplined in setting all these variables to true or false first, because of this:

Code:
$ some_unset_parameter=
$ if $some_unset_parameter; then
>   echo hello
> fi
hello

So there are some drawbacks to this approach...

Last edited by Scrutinizer; 03-29-2012 at 09:31 AM..
# 32  
Old 03-29-2012
I see, so when I am using the 0 and 1 thing, I have always have to check if it is a 1 or a 0.
# 33  
Old 03-29-2012
What do you mean with the "0 and 1 thing" ?
# 34  
Old 03-29-2012
Quote:
Originally Posted by Scrutinizer
What do you mean with the "0 and 1 thing" ?
Code:
hasArgument=1
 if [ $hasArgument == 1 ]; then
   ...
 fi


Last edited by Scrutinizer; 03-29-2012 at 12:19 PM.. Reason: Please use code tags
# 35  
Old 03-29-2012
This is how it actually works:

Code:
$ COMMAND=echo
$ $COMMAND a b c d
a b c d

$

So you can put the name of a command in a variable, and call it with $VARIABLE.

It just so happens there are commands named true and false!

Code:
$ whereis true false
true: /bin/true /usr/share/man/man1/true.1.bz2 /usr/share/man/man1p/true.1p.bz2
false: /bin/false /usr/share/man/man1/false.1.bz2 /usr/share/man/man1p/false.1p.bz2

$

And they do what they say they do. true always returns success, false always returns failure, which means when you join them together with && and ||, they do what they look like they should do.

They're often shell builtins, too.
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