Problem in bash script


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Problem in bash script
# 1  
Old 11-18-2010
Problem in bash script

I have written a script and I get error and I don't understand why.
Code:
neededParameters=2
numOfParameters=0
correctNum=0
while getopts "s:l:" opt 
do
    case "$opt" in
    s)
        serviceName= $OPTARG #errorline 1 
        numOfParameters= $numOfParameters + 1
        ;;
    l)
        fileName= $OPTARG #errorline 2 
        numOfParameters= $numOfParameters + 1    
        ;;
    ?)
        echo "unknown option"
        ;;
    esac
done

when I run:
script -s s -l l
Then I get error message on errorlines 1 and 2 that it doesn't recognize s and l.

I would be really glad for an help.
Thanks in advance.
# 2  
Old 11-18-2010
ok i tested this under linux, it runs fine

Code:
neededParameters=2
numOfParameters=0
correctNum=0
while getopts "s:l:" opt
do
    case $opt in
    s)
        serviceName=$OPTARG #errorline 1
        let numOfParameters++
        ;;
    l)
        fileName=$OPTARG #errorline 1
        let numOfParameters++
        ;;
    \?)
        echo "unknown option"
        ;;
    esac
done


Last edited by ctsgnb; 11-18-2010 at 11:31 AM.. Reason: need testing before
This User Gave Thanks to ctsgnb For This Post:
# 3  
Old 11-18-2010
Modified version:

Code:
neededParameters=2
numOfParameters=0
correctNum=0
while getopts "s:l:" opt
do
    case $opt in         # the quotes are unnecessary in this context
    s)
        serviceName=$OPTARG # no space after the equal sign
        numOfParameters=$(( $numOfParameters + 1 )) # I suppose you need arithmetic expansion here
        ;;
    l)
        fileName=$OPTARG #errorline 2 
        numOfParameters=$(( $numOfParameters + 1 )) 
        ;;
    ?)
        echo "unknown option"
        ;;
    esac
done

This User Gave Thanks to radoulov For This Post:
# 4  
Old 11-18-2010
Sorry I could not use s (for there is a silly program with that name on this box (AIX)...)
Code:
an12:/home/vbe $ more bash_opt.sh
neededParameters=2
numOfParameters=0
correctNum=0
#while getopts "s:l:" opt 
while getopts t:l: opt 
do
    case "$opt" in
    t)
        serviceName=$OPTARG #errorline 1 
        numOfParameters=`expr $numOfParameters + 1`
        ;;
    l)
        fileName= $OPTARG #errorline 2 
        numOfParameters=`expr $numOfParameters + 1`
        ;;
    ?)
        echo "unknown option"
        ;;
    esac
done
echo neededParameters= $neededParameters
echo numOfParameters= $numOfParameters
an12:/home/vbe $ bash -debug bash_opt.sh -t t -l l
bash_opt.sh: line 13: l: command not found
neededParameters= 2
numOfParameters= 2

This User Gave Thanks to vbe For This Post:
# 5  
Old 11-18-2010
Quote:
Originally Posted by ctsgnb
should be :s:l
instead of s:l:
?
O.K.

But why do you think that?

Because from what I understand when there is colons after the letter then it mean that a parameter must come after it when you run the script.
I mean it mean that if you write in the shell:
script -s
then the colons after the s (in the script) will send error.
Hope I explain myself good.
# 6  
Old 11-18-2010
Quote:
Originally Posted by ctsgnb
should be :s:l
instead of s:l:
?
These two statements have different meanings.
# 7  
Old 11-18-2010
Quote:
Originally Posted by vbe
Sorry I could not use s (for there is a silly program with that name on this box (AIX)...)
Code:
an12:/home/vbe $ more bash_opt.sh
neededParameters=2
numOfParameters=0
correctNum=0
#while getopts "s:l:" opt 
while getopts t:l: opt 
do
    case "$opt" in
    t)
        serviceName=$OPTARG #errorline 1 
        numOfParameters=`expr $numOfParameters + 1`
        ;;
    l)
        fileName= $OPTARG #errorline 2 
        numOfParameters=`expr $numOfParameters + 1`
        ;;
    ?)
        echo "unknown option"
        ;;
    esac
done
echo neededParameters= $neededParameters
echo numOfParameters= $numOfParameters
an12:/home/vbe $ bash -debug bash_opt.sh -t t -l l
bash_opt.sh: line 13: l: command not found
neededParameters= 2
numOfParameters= 2

Thanks I will check your suggestion.

---------- Post updated at 04:53 PM ---------- Previous update was at 04:46 PM ----------

Code:
numOfParameters=`expr $numOfParameters + 1`

Is this the way to do arithmetic in bash script.
using Quotation markand and exper.
Because I thought you can just write the variables and do use math operator.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Array problem in Bash Script

I am trying to write a Bash Script using a couple of arrays. I need to perform a countdown of sorts on an array done once daily, but each day would start with the numbers from the previous day. This is what I'm starting with : #!/bin/bash days=(9 8 7 6 5) for (( i = 0 ; i < ${#days} ; i++... (4 Replies)
Discussion started by: cogiz
4 Replies

2. Shell Programming and Scripting

Bash/awk script problem

Hi, I have 100 files containing different values in single column, I want to split those files in two separate files (file2 and file3) based on average value of first column of each file, for those files I am working on the following script #bin/bash for memb in $(seq 1 100) do awk... (4 Replies)
Discussion started by: dsp80
4 Replies

3. Shell Programming and Scripting

Help with bash script problem

Hi, Below is my bash script: cat run_all.sh if && ; then Number_Count_Program $1.results $2.results > $1.$2.counts else Number_Split_Program $1.results $2.results > $1.$2.split fi After I run the following command: ./run_all.sh A B ./run_all.sh: line 1: Anybody advice to edit... (5 Replies)
Discussion started by: perl_beginner
5 Replies

4. Shell Programming and Scripting

Problem with Bash Script.

Hi guys! I'm new to the forum and to the Bash coding scene. I have the following code paths=/test/a paths=/test/b keywords=\"*car*\" keywords=\"*food*\" for file in `find paths -type f -ctime -1 -name keywords -print 2>/dev/null` do #.... do stuff here for every $file found... (5 Replies)
Discussion started by: RedSpyder
5 Replies

5. Shell Programming and Scripting

Problem using grep in bash script

When it comes to programing and UNIX, I know just enough to be really really dangerous. I have written a python script to parse through a file that contains ~1 million lines. Depending on whether a certain string is matched, the line is copied into a particular file. For the sake of brevity,... (4 Replies)
Discussion started by: errcricket
4 Replies

6. Shell Programming and Scripting

help with a bash script problem

hi to everyone :) i am new to linux and bash and i am trying to build a bash script, that is quite similar to the well known cmd 'split' ... ;) it is now already "working" ... i can use it like: ./splitfix.sh -v -s 10 foo ./splitfix.sh -s 10 -v foo ./splitfix.sh -s 10 foo ./splitfix.sh -v... (5 Replies)
Discussion started by: drjodo
5 Replies

7. Shell Programming and Scripting

problem using variables in bash script

I am using variable to give the location of the file I am using but I get error. Here is the code: LogFile=/tmp/log.email echo -e "could not close the service - error number $error \n" > $LogFile well this is not all the code but is enough because the problem start when I try to use the... (3 Replies)
Discussion started by: programAngel
3 Replies

8. Shell Programming and Scripting

Simple bash script problem

#!/bin/bash cd /media/disk-2 Running ./run.sh it's not changing directory.Why? (6 Replies)
Discussion started by: cola
6 Replies

9. UNIX for Dummies Questions & Answers

Bash script argument problem

I'm having problems with bash scripts. If a bash script is called with no arguments, I always get "PHIST=!" as the first argument (i.e. this is what $1 equals). Why? Where does this come from, and how can I fix it? Nothing in the bash man pages refer to this mysterious default argument. (2 Replies)
Discussion started by: sszd
2 Replies

10. Shell Programming and Scripting

bash script problem

hi I am writing a bash script that uses dialog to get user input an diplay messages to user. I have a small problem dialog --inputbox "blabla" 20 50 2> /tmp/output VAR="'cat /tmp/output'" mkdir $VAR the code below requests user for a directory path to be created. But, if the user uses... (1 Reply)
Discussion started by: fnoyan
1 Replies
Login or Register to Ask a Question