How to check that passed parameters all have the same extension?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to check that passed parameters all have the same extension?
# 8  
Old 04-07-2010
Here is my code, in sh
Code:
#!/bin/sh

x=${1##*.}
#for i in $*; do
#Modified per alister's tip
for i; do
    [ $x != ${i##*.} ] && {
        echo "All extensions are NOT alike."
        exit 1
    }
done
echo "All extensions ARE alike."

exit 0


Last edited by tukuyomi; 04-07-2010 at 02:51 PM..
# 9  
Old 04-07-2010
Quote:
Originally Posted by tukuyomi
Here is my code, in sh
Code:
for i in $*; do

That will break if there are any filenames with IFS characters (space/tab/newline by default). Instead, use one of the following:
Code:
for i; do

or
Code:
for i in "$@"; do

Regards,
Alister
# 10  
Old 04-07-2010
Quote:
Originally Posted by alister
Code:
for i; do

or
Code:
for i in "$@"; do

Regards,
Alister
Thanks for the tip Smilie
# 11  
Old 04-07-2010
A warning about shift, I think Alister first mentioned it:

If you shift through all of your positional parameters, they are all gone.
From bash documentation:
Quote:
#!/bin/bash
# shft.sh: Using 'shift' to step through all the positional parameters.

# Name this script something like shft.sh,
#+ and invoke it with some parameters.
#+ For example:
# sh shft.sh a b c def 23 Skidoo

until [ -z "$1" ] # Until all parameters used up . . .
do
echo -n "$1 "
shift
done

echo # Extra linefeed.

# But, what happens to the "used-up" parameters?
echo "$2"
# Nothing echoes!
# When $2 shifts into $1 (and there is no $3 to shift into $2)
#+ then $2 remains empty.
# So, it is not a parameter *copy*, but a *move*.

exit
You can use bracket notation to step thru the positional parameters without destroying them. one way:
Code:
while [[ $i -le $# ]]
do
 echo \$${i}
 i=$(( $i + 1 ))
done

# 12  
Old 04-07-2010
Good point, jim. I've edited my solution a few times. First iteration shifted once. Then it did not shift. Then the shift creeped back in. Now it's back out. I wasn't considering that this could be part of a larger script and viewed the shift as inconsequential.

Alister

---------- Post updated at 02:58 PM ---------- Previous update was at 02:39 PM ----------

Quote:
Originally Posted by jim mcnamara
You can use bracket notation to step thru the positional parameters without destroying them. one way:
Code:
while [[ $i -le $# ]]
do
 echo \$${i}
 i=$(( $i + 1 ))
done

Unless that's a newer shell feature with which I am not familiar, I think what you're attempting requires some eval magic. Perhaps something like:
Code:
while [[ $((++i)) -le $# ]]
do
    eval echo \${$i}
done

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Three parameters passed from a script to other at different time

nothing (0 Replies)
Discussion started by: shikha84
0 Replies

2. UNIX for Dummies Questions & Answers

Trouble displaying parameters passed into a for loop

#!/bin/bash function check_num_args() { if ; then echo "Please provide a file name" else treat_as_file $* fi } function treat_as_file() { numFiles=$# for((i=1;i<=$numFiles;i++));do echo $i ... (3 Replies)
Discussion started by: kikilahooch
3 Replies

3. Shell Programming and Scripting

Check if passed arguments is users

i want to check passed arguments one by one and if it is user print home director of that user (3 Replies)
Discussion started by: testman84
3 Replies

4. Shell Programming and Scripting

Parameters passed to commands but not working in Bash shell

Hi, I am trying to do this thing useing my shell bash ( sorry for my english ) I have in a file 63 hostnames, i wanna ask to the DHCP admin, to reserv that reserves 63 IP addresses of this hosts, using their mac address. I have thinked this script: for ((i=1;i<63;i++)); do arp $(head... (10 Replies)
Discussion started by: Cypress
10 Replies

5. UNIX for Dummies Questions & Answers

ksh: verifying number of parameters passed

hi all, i have a ksh script that takes up to 3 parameters -- only 2 of which are required. what's the simplest way to check if the user passed 2 or 3 parameters? if 3 parameters are not null then do this elif 2 parameters are not null then do this else echo "you need at least 2... (5 Replies)
Discussion started by: ankimo
5 Replies

6. Shell Programming and Scripting

Problem with script not able to take parameters passed to it

debug output: (3 Replies)
Discussion started by: dsravan
3 Replies

7. Shell Programming and Scripting

Problem with script not able to take parameters passed to it

when I pass any 2 parameters it always says: Number of parameters passed: 1 and the job_name as x Can some body help? (7 Replies)
Discussion started by: dsravan
7 Replies

8. Shell Programming and Scripting

Extracting passed in parameters

we want to produce a script that we can pass parameters of -a for email address and -s for subject then the report filename, so an exmaple would be; email_report -a sendto@domain.com -s This is a test reportname.txt The problem we have is the subject can have more than one word, so I can't just... (2 Replies)
Discussion started by: spookyrtd99
2 Replies

9. UNIX for Dummies Questions & Answers

Assigning a Variable all the Parameters passed

Hi, I have a unix script which can accept n number of parameters . I can get the parameter count using the following command and assign it to a variable file_count=$# Is there a similar command through which i can assign a variable all the values that i have passed as a parameter ... (2 Replies)
Discussion started by: samit_9999
2 Replies

10. Shell Programming and Scripting

Check if argument passed is an integers

How do I check if the argument passed to a script is an integer? I am writting a script that will take to integers and want to be able to check before I go on. I am using bourne shell. Thanks in advance (13 Replies)
Discussion started by: elchalateco
13 Replies
Login or Register to Ask a Question