Create Dynamic if condition


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Create Dynamic if condition
# 1  
Old 05-11-2015
Create Dynamic if condition

Create Dynamic If condition

Hi,
I have a file color.txt which has data as shown below
Code:
Red
Blue
Green
Yellow
White
Pink
Black

Based on a variable I execute a tail command as shown below
Code:
tail -${LEFT_OVR} color.txt

LEFT_OVR can be any number less than count of number of lines in a file

so if LEFT_OVR=2, then output would be
Code:
Pink
Black

Based on output of tail command I need to build a dynamic If condition, which will look something like this

Code:
if [ "$color" = "Pink" ] || [ "$color" = "Black" ]

I'm planning to do something like this
Code:
tail -${LEFT_OVR} color.txt > tail_out
one_line=`awk 'BEGIN { ORS = " " } { print }' tail_out`

COND=""
for c in $one_line
do
COND="[ color = $c ] $COND"
done

Next I would check for occurrence of ] [ and replace with ] || [

Any ideas if there is something easier to achieve similar result?

Last edited by rbatte1; 05-11-2015 at 12:55 PM.. Reason: CODE tags for output
# 2  
Old 05-11-2015
With LEFT_OVR=4, try
Code:
tail -${LEFT_OVR} color.txt | { while read CND; do CMD+="[ color = $CND ] || "; done; echo ${CMD% || }; }
[ color = Yellow ] || [ color = White ] || [ color = Pink ] || [ color = Black ]

Unfortunately, you'll need to use the unloved eval to take advantage of above, or output it into a temp file that you source, then.

Last edited by RudiC; 05-11-2015 at 01:03 PM..
# 3  
Old 05-11-2015
Would something like this, base on a case statement work?
Code:
$ cat case_test
t1=Red
t2=Yellow
t3=Green
t4=Brown
t5=Blue
t6=Pink
t7=Black

case $1 in
 $t1) echo "The red ball is worth 1 point."         ;;
 $t2) echo "The yellow ball is worth 2 points."     ;;
 $t3) echo "The green ball is worth 3 points."      ;;
 $t4) echo "The brown ball is worth 4 points."      ;;
 $t5) echo "The blue ball is worth 5 points."       ;;
 $t6) echo "The pink ball is worth 6 points."       ;;
 $t7) echo "The black ball is worth 7 points."      ;;
 *)   echo "Any other option is a foul."            ;;
esac

I get the following simple sample output:-
Code:
$ ./case_test Yellow
The yellow ball is worth 2 points.
$ ./case_test White 
Any other option is a foul.
$

You could easily set the variables t1, t2, t3 etc. based on your tail output and set all the others to be dummy or the like to effectively switch off those tests.


Does that give you an angle?



Robin
# 4  
Old 05-11-2015
Another way might be to build up an array from the tail output and then have a loop around the if statement to check each one set in turn. It depends quite what you need to achieve I suppose.


Can you elaborate on the overall desired need?



Robin
# 5  
Old 05-11-2015
With a recent bash, try
Code:
[[ "$(tail -${LEFT_OVR} color.txt | tr '\n' ' ' )" =~ "$color" ]] && echo good || echo bad

These 2 Users Gave Thanks to RudiC For This Post:
# 6  
Old 05-11-2015
Hi,
Can you explain, how above command works, in building the if condition?
# 7  
Old 05-11-2015
I love arrays:
Code:
#!/bin/bash
C=1
declare -A  BALL

while read color;do
	BALL[${color,,}]=$C
	C=$(( $C + 1 ))
done<"${0/sh/txt}"

echo "Ball $1 is worth ${BALL[${1,,}]}"

Have a good week Smilie

EDIT-Note:
My files were named identical but with another file extension (sh/txt).
Though, to be accurate for snooker values, the colors would need to be in order.

EDIT2:
Outputs like:
Code:
+ bin $ sh ~/tmp/sample.sh pink
Ball pink is worth 6
:) bin $ sh ~/tmp/sample.sh red 
Ball red is worth 1

EDIT3 - Explanation:
Code:
C=1
declare -A  BALL

Sets variable C to 1, and declares varable BALL as ALPHA indexed Array. (not quiet sure on the ALPHA label, ity my 'donkey-bridge')

Code:
while read color;do
....
done<"${0/sh/txt}"

Read from file $0 (the execute[d|r] script), but remove first occourence of sh with txt within its filename,
expand each line to the only passed variable color.
Since the (in this example) used scriptname and content-file-name are identical but their file extension not, this works quite fine.

Code:
	BALL[${color,,}]=$C
	C=$(( $C + 1 ))

${color,,} makes the content of variable color to small letters, since usualy people forget to press shift when passing options or arguments to commands.
So it set the array index $color to value $C, then increment that value. (could be shortened to ((C++)) in this case, or ((counter++)) whatsoever you use for an index/counter)

Code:
echo "Ball $1 is worth ${BALL[${1,,}]}"

Finaly we print out the the desired information. 'downcode' the passed argument to small letters, just to be sure, so it matches the array index, which is now set to letters (the color names).

hth

Last edited by sea; 05-11-2015 at 03:46 PM..
These 2 Users Gave Thanks to sea For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

How to create folder by using if and elif condition?

Hi All, I have already code to create folder for one country let say US , now we want to create folder/directory for JP country also using shell script , application server. $COUNTRY='US' if ] then if mkdir -m 777 -p /opt/TEST/$COUNTRY/$INVOICE >/dev/null 2>&1 | tee -a ... (5 Replies)
Discussion started by: Boost
5 Replies

2. UNIX for Dummies Questions & Answers

Create a file on UNIX with multiple columns on certain condition

I need to write the list of files to a new file in one column , the second column would contain the first line of that file (header record extracted through head -1 ) and the third column would contain the last record of that file (trailer record tail -1 ) . Example :- folder where the files... (8 Replies)
Discussion started by: IshuGupta
8 Replies

3. Shell Programming and Scripting

Create, validate and using dynamic variables in Bash scripting

Hi All, I am really struggling to solve this problem, this might be small but I am not able to, can somebody help me? I have few directories and these directories receives text files in large amount with in fraction of seconds. So I just want to send all the files in current directory to... (2 Replies)
Discussion started by: VasuKukkapalli
2 Replies

4. Shell Programming and Scripting

Help Create dynamic ksh script from a script

I am currently running 2 scripts to gather data for a 3rd script and would like to combine the 2 scripts into one. Having issues with the final output format. Note cannot post URL so replaced the http stuff with (name) in the examples All scripts contain #!/bin/ksh OS = Red Hat Enterprise... (0 Replies)
Discussion started by: pcpinkerton
0 Replies

5. UNIX for Dummies Questions & Answers

Create a condition for a non-included string

hey, just want to ask how to check this scenario a="apple banana cherry" if egg=0 fi how do you do the condition? thanks! (2 Replies)
Discussion started by: h0ujun
2 Replies

6. Shell Programming and Scripting

redirect stdout echo command in condition A run in condition B

hi, I have some problems in my simple script about the redirect echo stdout command inside a condition. Why is the echo command inside the elif still execute in the else command Here are my simple script After check on the two diff output the echo stdout redirect is present in two diff... (3 Replies)
Discussion started by: jao_madn
3 Replies

7. Shell Programming and Scripting

create separate file after checking condition..

Problem : I want to create a separate file for country list if condition is true. Please help. ***************************************************** Input file: SV-INCR-139302-365540488-201104090934.sqllog SV-INCR-1082-552793184-201104040805.sqllog SV-INCR-1077-855045741-201104040805.sqllog... (4 Replies)
Discussion started by: humaemo
4 Replies

8. UNIX for Advanced & Expert Users

Sql dynamic table / dynamic inserts

I have a file that reads File (X.txt) Contents of record 1: rdrDESTINATION_ADDRESS (String) "91 971502573813" rdrDESTINATION_IMSI (String) "000000000000000" rdrORIGINATING_ADDRESS (String) "d0 movies" rdrORIGINATING_IMSI (String) "000000000000000" rdrTRAFFIC_EVENT_TIME... (0 Replies)
Discussion started by: magedfawzy
0 Replies

9. Shell Programming and Scripting

how to create folder wen the condition satisfied

hi i hav files ha1j ha2m ha3n ha4q ha5s ...like tat im having some 20 files ..and i want to create a folder as the same amount of files which im having wen the condition if loop is satisfied .. thank you (5 Replies)
Discussion started by: maximas
5 Replies

10. Shell Programming and Scripting

How to create a dynamic list?

Hi falks, I need to write a function in k-shell which cd to root directory and ask the user which sub directory you want to tar. The user will select directories untill quit. How to do it? Thanks in advance, Nir (4 Replies)
Discussion started by: nir_s
4 Replies
Login or Register to Ask a Question