Login or Register to Ask a Question and Join Our Community


Beginner: script headache


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Beginner: script headache
# 1  
Old 10-09-2016
Beginner: script headache

Hi,

I am new to shell scripting, but doing my best to learn things. Today doing courses there was exercise like this:

Code:
#!/usr/bin/bash
a=$1
b=$2
if [[ $a == "A" && $b == "B" ]]
then
echo "Conditions are met"
else
echo "Conditions are not met"
fi

I improved it a little, beacuse of curiosity Smilie to this:

Code:
#!/bin/sh

a=$1
b=$2


if [[ $a == "A" || $a == "a" && $b == "B" || $b == "b" ]]
then
        echo "Conditions are met"
else
        echo "Conditions are not met"
fi

And here is funny thing: when you put vaules to script as: ./script b b it shows that conditions are met, but they shouldn't - at least accroding to the first script they shouldn't, the thing I changed is sensitivity for small letters.

Maybe it's written wrong? Have no idea, please advise Smilie
# 2  
Old 10-09-2016
if you execute with debugging mode, you can see the last condition was met (b=b). That's why it shows the "conditions are met"

Code:
bash-3.2$ bash -x script.sh  b b
+ a=b
+ b=b
+ [[ b == \A ]]
+ [[ b == \a ]]
+ [[ b == \b ]]
+ echo 'Conditions are met'
Conditions are met

# 3  
Old 10-09-2016
You are having a problem with the precedence of operators. In that expression, the AND operator has higher precedence than the OR operator, so the expression in your if statement is evaluated as though you had written:
Code:
if [[ $a == "A" || ( $a == "a" && $b == "B" ) || $b == "b" ]]

To get what I think you were trying to do, you want something more like:
Code:
#!/bin/sh
a=$1
b=$2

if [[ ( $a == "A" || $a == "a" ) && ( $b == "B" || $b == "b" ) ]]
then
        echo "Conditions are met"
else
        echo "Conditions are not met"
fi

# 4  
Old 10-09-2016
Thx, now everyting is clear about this case Smilie
# 5  
Old 10-10-2016
As an addendum you are using #!/bin/sh
This is a POSIX compatible version of it...
Code:
#!/usr/local/bin/dash
# * !/bin/sh *
a=$1
b=$2

if [ "$a" = "A" ] || [ "$a" = "a" ] && [ "$b" = "B" ] || [ "$b" = "b" ]
then
        echo "Conditions are met."
else
        echo "Conditions are not met."
fi

# 6  
Old 10-10-2016
Quote:
Originally Posted by wisecracker
As an addendum you are using #!/bin/sh
This is a POSIX compatible version of it...
Code:
#!/usr/local/bin/dash
# * !/bin/sh *
a=$1
b=$2

if [ "$a" = "A" ] || [ "$a" = "a" ] && [ "$b" = "B" ] || [ "$b" = "b" ]
then
        echo "Conditions are met."
else
        echo "Conditions are not met."
fi

No. That has the same precedence problem as the code in post #1 in this thread. To do this using only POSIX-defined utilities, one way to do it would be:
Code:
#!/bin/ksh
a=$1
b=$2

if { [ "$a" = "A" ] || [ "$a" = "a" ]; } && { [ "$b" = "B" ] || [ "$b" = "b" ]; }
then
        echo "Conditions are met."
else
        echo "Conditions are not met."
fi

This was written and tested using a Korn shell, but will also work with any other POSIX-conforming shell.
This User Gave Thanks to Don Cragun For This Post:
# 7  
Old 10-10-2016
Hi Don...

I stand corrected...

Thanks...

EDIT:
Sorry about the edit but......
Just noticed the semi-colons, can you explain why they are needed?

---------- Post updated at 11:43 AM ---------- Previous update was at 10:09 AM ----------

It seems like this does work too...
Code:
#!/usr/local/bin/dash
a=$1
b=$2

if ( [ "$a" = "A" ] || [ "$a" = "a" ] ) && ( [ "$b" = "B" ] || [ "$b" = "b" ] )
then
        echo "Conditions are met."
else
        echo "Conditions are not met."
fi

Results, OSX 10.7.5, default [bash] terminal but calling 'dash'.
Code:
AMIGA:barrywalker~> cd Desktop/Code/Shell
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh a
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh b
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh "" b
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh b ""
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh a ""
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh "" a
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh a a
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh a b
Conditions are met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh b a
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh b b
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh A b
Conditions are met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh A B
Conditions are met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh a B
Conditions are met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh B B
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh B A
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh B b
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh B a
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh A A
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> ./AND_OR.sh b B
Conditions are not met.
AMIGA:barrywalker~/Desktop/Code/Shell> _


Last edited by wisecracker; 10-10-2016 at 07:44 AM.. Reason: This extra code was supposed to be in a new window, no idea why it is an EDIT!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Beginner needs help with first script

Hi, so I have been doing ok making a relatively simple script just processing some data. However I am now at the point where im struggling to find the specific help I need. I have files in the form of yyyy.ddd.hh.mm.ss.stationnumber.component (they are earthquake events). eg.... (12 Replies)
Discussion started by: neneman3000
12 Replies

2. Homework & Coursework Questions

Shell Script (beginner)

1. The problem statement, all variables and given/known data: Arguments: http://farm9.staticflickr.com/8070/8212131370_8b6e8c10c5_c.jpg I am given these three arguments. $1, $2, $3 The first argument is the path to a directory. So, how would I go into the directory and compare files? I... (5 Replies)
Discussion started by: spider-man
5 Replies

3. Homework & Coursework Questions

Shell-script loops beginner

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: "Create a shell script that changes the selected word to another word in all files from selected archive. The... (1 Reply)
Discussion started by: oibanuelos
1 Replies

4. Shell Programming and Scripting

Shell script (beginner) need help...

Hello, I'm new to Sheel script and I need your help for a script I need to develop (for me). Indead, I have a software which log all entry from internet and save it in text file. But, the log is practically unreadable because every 256 characters jump to a new line (even if the message is... (5 Replies)
Discussion started by: acidoangel
5 Replies

5. Shell Programming and Scripting

Debugging a beginner shell script...

I have been following a tutorial on bash which has proven to be very helpful. However, i am stuck with a command not found issue when asking for a y/n response from the user. Below is the part of code I believe is giving me grief... I have been trying to work through this for 3 hours now.... Please... (5 Replies)
Discussion started by: brokepunk
5 Replies

6. Shell Programming and Scripting

Beginner shell script help

. ./testFile.sh url=http://ichart.finance.yahoo.com/table.csv?s= suf=&d=5&e=9&f=2009&g=d&a=1&b=4&c=1999&ignore=.csv wget $url$s1$suf; sleep 10; cat header.txt > $s1.txt; chmod 777 $s1.txt; sed '1d' table.csv?s\=$s1 >> $s1.txt; rm -Rf table* Very new at shell scripting as you can see... (3 Replies)
Discussion started by: harte
3 Replies

7. Shell Programming and Scripting

Need help with (beginner?) script

I am in an intro to unix/linux course, and need some help with a project. We are tasked with creating a basic script to automate a task that an Admin might need to do. We submitted ideas and mine was to have the system keep a record of log in and log out times for users. I thought this was going... (3 Replies)
Discussion started by: DethbyNo
3 Replies

8. Shell Programming and Scripting

What's wrong here? (Beginner's script)

Hi Folks, New member here. I have been using UNIX systems for the past ~4 years (Linux, AIX, HP-UX, mostly) but have never had the need to write a script for myself. Now, things have changed and I'm in a bit of a pickle. I have, what looks to me like a syntactically correct script that's not... (2 Replies)
Discussion started by: pallak7
2 Replies

9. Shell Programming and Scripting

Beginner needs help with script

I would like to get a sample script (ksh or bash, or both so I could see the differences) What I want to do with the script is send an daily email to myself that contains the following: The number of files in a directory The total size of the files in that directory The contents of a file... (2 Replies)
Discussion started by: martyb555
2 Replies

10. Shell Programming and Scripting

Shell Script for Beginner

I have a folder with lots of file. e.g. a.txt, b.txt, c.txt.... I want to put these files from the source directory and place them in a destination directory in a specific order, such as /destination/a/a.txt, /destination/b/b.txt, /destination/c/c.txt, ...... Please help. Thx :confused: (3 Replies)
Discussion started by: aaron_fong
3 Replies
Login or Register to Ask a Question

Featured Tech Videos