small question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting small question
# 1  
Old 09-19-2002
small question

Hi there,

I found the following script on the net, i like to use it as a standard template for new scripts.

But i do not understand the meaning of the last line, can anybody explain what going on on the last line

vflag=off
filename=
while getopts vf: opt
do
case "$opt" in
v) vflag=on;;
f) filename="$OPTARG";;
\?) # unknown flag
echo >&2 \
"usage: $0 [-v] [-f filename] [file ...]"
exit 1;;
esac
done
shift `expr $OPTIND - 1`
# 2  
Old 09-19-2002
I too did not get it.. but what i understand is that the shift command shifts the parameter to one position.

Generally we can specify a number next to shift command and the parameters are shifted to that many positions..
# 3  
Old 09-19-2002
Reading the man page for getopts may help you understand .. didn't work for me Smilie

In the man page, there is an example that uses shift `expr $OPTIND - 1` at the end. It says "The shift command allows the shell program to continue to process any other arguments." I'm not sure if by arguments it means multiple options (like -v and -f at the same time) or option-arguments (like -f "file1 file2").

I tried the script and modified it to display the first two lines of any file(s) specified with the -f option.

It worked fine whether I kept the line shift `expr $OPTIND - 1` in there or not...

I tried:
script -f "testFile testFile2"
script -f testFile -f testFile2

With the -v .. without the -v .. I can't figure what difference that last line makes.. Smilie
# 4  
Old 09-19-2002
Suppose you invoke a script like this:
./script -abc -d13 -xyz file1 file2 file3

getopts will pull the options apart and deliver them to you one by one. So you will get a, b, c, d 13, x, y, and z.

Your script would use these options to set various internal flags and switches. Then it wants to get the rest of the parameters. This will be the file1, file2, file3.

This is where that shift comes in. That's how the scipt steps over the options to the rest of the parameters.

If there are no trailing parameters after the options, then yeah, no need for the shift.
# 5  
Old 09-19-2002
From what you're saying Perderabo, I should have seen some difference, then, when I removed that last line and entered the commands I did versus when I left that last line in there.

But I didn't...
# 6  
Old 09-19-2002
Post your code.
# 7  
Old 09-19-2002
I didn't post it because it's the same as what janr posted with a couple additions:
Code:
vflag=off
filename=
while getopts vf: opt
do
case "$opt" in
v) vflag=on
echo 'vflag is on';;
f) filename="$OPTARG"
head -n 2 $filename;;
\?) # unknown flag
echo >&2 \
"usage: $0 [-v] [-f filename] [file ...]"
exit 1;;
esac
done
echo $OPTIND
shift `expr $OPTIND - 1`

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Ok i have a small assembly question

I have this small program that runs with the flat assembler. My problem is that at the receive line function it receives the line and if there isn't a $ typed at the end of the user input the program displays a lot of strange stuff, sometimes beeps and then it seems to terminate without causing any... (13 Replies)
Discussion started by: Errigour
13 Replies

2. Shell Programming and Scripting

Small fast question

just to confirm du from sh show sizes as multiples of 512 byte right? (4 Replies)
Discussion started by: Nick1097
4 Replies

3. Shell Programming and Scripting

need a small help

Hi, sorry for inconvenience..wrong query posted. Thanks for your help. Thanks (1 Reply)
Discussion started by: kirankumar
1 Replies

4. Shell Programming and Scripting

Need small help

Hi all, I have two files in my folder 1.index.jsp 2.maintenance.jsp Once hit the URL in IE,It will call the index.jsp file than application working fine. I want to some maintenance in my application, during the application maintenance than it will... (1 Reply)
Discussion started by: lkeswar
1 Replies

5. Programming

A small question about fork()

Hello experts, I am using fork() in my code but I am confused which output comes first child or parent? I did the following code .My book shows parent first but my linux shows child first.Can anyone tell me why? #include <stdio.h> int main(){ int pid; printf("I am original process with pid... (5 Replies)
Discussion started by: mlhazan
5 Replies

6. Programming

A small question about file descriptor

Can any body tell me when I put close(2), why the code does not show any out put? #include <stdio.h> #include <fcntl.h> #include <errno.h> int main(){ int fd1,fd2,fd3,fd4; close(2); fd1=open("test1.txt",O_WRONLY |O_CREAT | O_TRUNC,0744); fprintf(stderr,"fd1 = %d\n",fd1); ... (5 Replies)
Discussion started by: mlhazan
5 Replies

7. UNIX for Dummies Questions & Answers

Small question regarding SSH

I am looking for some model like this: My Computer ------------- Intermediate Server (IS) ------------- Own Server I must be able to ssh into the Intermediate Internet Server which is generally an online version of SSH service through which I will connect to Own Server. I was the IS to... (2 Replies)
Discussion started by: Legend986
2 Replies

8. Shell Programming and Scripting

A small minix question

First af all hi. i want to create a batch script which inform when users log in last time on system or if they are online when they logged in. I want ot use a file .users which has the usernames of users. i want to print for example peter is ONLINE: Logged in on Wed Feb 11 07:47 alex... (2 Replies)
Discussion started by: sasa
2 Replies

9. Shell Programming and Scripting

small question regarding substr()

Hello.. I am doing some awk-ing and among all I use substr inside it.. I have: ....substr($0,60,37) meaning as U all know take from 37 char. from point 60.. can I put it like this substr($0,60,end of line) meaning take it from point 60 and take all characketrs in that line until line... (2 Replies)
Discussion started by: amon
2 Replies

10. Shell Programming and Scripting

small question of echo | grep command

Hi, i've got the following: a=`echo $b | grep '^.*/'` i'm storing in the variable the value of the variable b only if it has a / somewhere. It works, but i don't want to print the value. How do i give the value of b to the grep command without the echo? thanks! (5 Replies)
Discussion started by: kfad
5 Replies
Login or Register to Ask a Question