Rules with using double parentheses in Bash


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Rules with using double parentheses in Bash
# 1  
Old 02-09-2011
Rules with using double parentheses in Bash

Hi.could you explain me what are the rules when we are using double parentesis in if statement,if I put [ $# > 0 ],the code is working ,with (( is not

Code:
 
#!/bin/bash
if (($# > 0))
then
 if ((! -d "$1"))  
then
 echo "Directory $1 not found"
fi
else
 echo Problem
fi

# 2  
Old 02-09-2011
This is probably what you're looking for:

Test Constructs
# 3  
Old 02-09-2011
Quote:
Originally Posted by lio123
Hi.could you explain me what are the rules when we are using double parentesis in if statement,if I put [ $# > 0 ],the code is working

That doesn't do what you think it does. (I made the same mistake when I first started shell scripting.)

The greater-than symbol, >, is a redirection operator, not a comparison operator (unless it is escaped, in which case it is string comparison, not numerical). What you need is:
Code:
[ $# -gt 0 ]

(I never use the non-standard (( ... )) syntax.)
This User Gave Thanks to cfajohnson For This Post:
# 4  
Old 02-09-2011
Some ideas:

Code:
#!/bin/bash
# scriptname : A script to do something with a directory
#
# Parameter validation
if [ ! $# -eq 1 ]
then
       echo "Usage: scriptname directory"
       exit 1
fi
# Save supplied parameter
mydir="$1"
# Does the directory exist?
if [ ! -d "${mydir}" ]
then
        echo "Directory $1 not found"
        exit 1
fi
# Processing continues here

# 5  
Old 02-09-2011
Quote:
Originally Posted by methyl
Some ideas:

Code:
#!/bin/bash
# scriptname : A script to do something with a directory
#
# Parameter validation
if [ ! $# -eq 1 ]


Code:
if [ $# -ne 1 ]

Quote:
Code:
then
       echo "Usage: scriptname directory"
       exit 1
fi
# Save supplied parameter
mydir="$1"


Code:
mydir=$1

Quote:
Code:
# Does the directory exist?
if [ ! -d "${mydir}" ]


Code:
if [ ! -d "$mydir" ]

Quote:
Code:
then
        echo "Directory $1 not found"
        exit 1
fi
# Processing continues here

# 6  
Old 02-09-2011
@cfajohnson
I only agree with the simplification of the "not" condition in the first command you post. The rest is pedantic and naive and reduces the resiliance of the script to duff parameters and similar environment variable names.

If I thought that there were lots of parameters I would have posted:
Code:
mydir="${1}"

When you get into 5,000 line Shell scripts you take all precautions.

Last edited by methyl; 02-09-2011 at 07:03 PM..
# 7  
Old 02-09-2011
Quote:
Originally Posted by methyl
@cfajohnson
I only agree with the simplification of the "not" condition in the first command you post. The rest is pedantic and naive and reduces the resiliance of the script to duff parameters and similar environment variable names.

If you write your scripts correctly, you don't need that "protection".
Quote:
If I thought that there were lots of parameters I would have posted:
Code:
mydir="${1}"


That is the same as:
Code:
mydir=$1

The braces and quotes are unnecessary in any circumstances.

If you don't know what is required and what is not, how do you know what difference extra "precautions" will make?

Last edited by cfajohnson; 02-09-2011 at 07:57 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Answers to Frequently Asked Questions

Add string to parentheses

Suppose I have this code : int main () { int i = NULL; /* incorrect */ return 0; } and I want to put the word between the two parentheses like this : int main (void) { int i = NULL; /* incorrect */ return 0; } which command is used to do it in Linux ? (2 Replies)
Discussion started by: steve120
2 Replies

2. Shell Programming and Scripting

[All variants] remove first pair of parentheses

How to remove first pair of parentheses and content in them from the beginning of the line? Here's the list: (ok)-test (ok)-test-(ing) (some)-test-(ing)-test test-(ing) Desired result: test test-(ing) test-(ing)-test test-(ing) Here's what I already tried with GNU sed: sed -e... (6 Replies)
Discussion started by: useretail
6 Replies

3. Shell Programming and Scripting

Help with extracting data within parentheses

This is my input file: a|b|c(ef)|g|h(km)|p My output file should look like: a|b|ef|g|km|p That is, pipe is the delimiter. The data within pipe must be displayed as it is but if it encounters any data within parentheses, then only the data within parentheses has to be displayed ( the data... (2 Replies)
Discussion started by: ksatish89
2 Replies

4. Shell Programming and Scripting

When does an if statement need parentheses

I was looking at a script in my little book on bash and saw that one of the if statements had parentheses instead of brackets for the condition. I've been trying to find in my book where it talks about parentheses (because the examples on the if statement in an earlier chapter doesn't seem to... (3 Replies)
Discussion started by: Straitsfan
3 Replies

5. UNIX for Dummies Questions & Answers

Replace all occurrences of strings with parentheses

Hi, I tried to adapt bartus's solution to my problem, without success. I want to replace all the occurences of this: with: , where something can contain an arbitrary number of balanced parens and brakets. Any ideas ? Best, (1 Reply)
Discussion started by: ff1969ff1969
1 Replies

6. Shell Programming and Scripting

How to insert Parentheses to each line in a file

Hi I have a file with numbers like this : 123 456 6798 9073233 12 8644 Now, I need to insert parentheses to each and every line like below : (123) (456) (6798) (9073233) (12) (8644) can anyone tell me a solution? (8 Replies)
Discussion started by: sudharsan23
8 Replies

7. UNIX for Dummies Questions & Answers

Brackets, parentheses in Shell Scripting

Hello, I have done a great deal of research on this and still cannot come to an understanding of the following: In if-else statements in shell scripting I have seen examples of single brackets, double brackets, single parantheses, and double paratheses. When should each one be used? And... (2 Replies)
Discussion started by: mojoman
2 Replies

8. UNIX for Dummies Questions & Answers

brackets vs parentheses - single and double

hi, unix gurus. i am wondering if someone can give me a clear explanation of the differneces between parentheses and brackets, both single and double. i have heard that double parentheses (( are used for numerical expressions and that single brackets [ are used for strings. but i see... (1 Reply)
Discussion started by: ankimo
1 Replies

9. Shell Programming and Scripting

Replace text in parentheses

Hi I would like to replace a comma in parentheses to a semicolon for example. Other commas outside () stay unchanged. How can I do this? aaaa,bbb,ccc,ddd(eee,fff,ggg),hhh,iii to aaaa,bbb,ccc,ddd(eee;fff;ggg),hhh,iii Thanks (5 Replies)
Discussion started by: lalelle
5 Replies

10. Shell Programming and Scripting

Parentheses in perl find/replace

I'm trying to use the following command to do a batch find and replace in all commonly named files through a file hierarchy find . -name 'file' |xargs perl -pi -e 's/find/replace/g' which works fine except for a substitution involving parenthesis. As a specific example I'm trying to sub... (3 Replies)
Discussion started by: Jeffish
3 Replies
Login or Register to Ask a Question