The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > UNIX for Dummies Questions & Answers
Google UNIX.COM


UNIX for Dummies Questions & Answers If you're not sure where to post a UNIX or Linux question, post it here. All UNIX and Linux newbies welcome !!

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
ls positional parameter vasuarjula AIX 1 02-13-2008 07:49 PM
Positional parameters shalu@ibm UNIX for Dummies Questions & Answers 2 11-22-2007 04:58 AM
positional grep Manish Jha Shell Programming and Scripting 1 05-16-2006 11:33 AM
Positional Parameters google Shell Programming and Scripting 2 09-26-2003 10:51 AM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1  
Old 10-21-2005
Registered User
 

Join Date: Oct 2005
Posts: 22
Positional Parameters

Hello,

I am using the Bourne shell.

I am trying to understand the concept of positional parameters.

I do understand that positional parameters:

1. Are initialized by shell
2. Have a max of 9 parameters ($1 to $9)
3. Have no limit on the number of arguments
4. Can be rearranged with the shift command

Can someone please give me a simple example to help me better understand how to use positional parameters?

Thanks,
Eric
Reply With Quote
Forum Sponsor
  #2  
Old 10-21-2005
vino's Avatar
Supporter (in vino veritas)
 

Join Date: Feb 2005
Location: Bangalore, India
Posts: 2,683
Code:
1. Are initialized by shell
They are not initialized by the shell. Rather they pick up the values from the arguments passed to a shell script.

2. Have a max of 9 parameters ($1 to $9)
Not true. It can go beyond 9. After $9, the next positional parameter will be accessed as ${10}, ${11} .. et al.

3. Have no limit on the number of arguments
This is true. Bit this statement is contradicting to what you mentioned in point 2. 

4. Can be rearranged with the shift command
The postional arguments gets shifted one place to the left when you make one shift call. i.e. $1 will get the value that was held by $2, $2 will get the value that was held by $3.. so on and so forth..
$0 never gets shifted.
And positional parameters cant be assigned new values unless you use set

Read the man bash

vino
Reply With Quote
  #3  
Old 10-22-2005
Registered User
 

Join Date: Oct 2005
Posts: 22
Code:
1. Are initialized by shell
They are not initialized by the shell. Rather they pick up the values from the arguments passed to a shell script.
I am not sure I completely understand this.

For example, if I do the following:
Code:
$> var1=one
$> var2=two
$> var3=three
$> echo $var1
one
$> echo $var2
two
$> echo $var3
three
How am I able to use these variables from a file within a different directory?
Is this a good example that will help me understand the concept? I am trying to write a few small examples to help me see exactly what is happening.

Code:
2. Have a max of 9 parameters ($1 to $9)
Not true. It can go beyond 9. After $9, the next positional parameter will be accessed as ${10}, ${11} .. et al.
What about addressable parameters? Is it a max of 9 addressable parameters? I am not sure where I read this. I wrote it down as I was trying to learn more about it.

Code:
3. Have no limit on the number of arguments
This is true. Bit this statement is contradicting to what you mentioned in point 2.
I understand that this does contradict what I originally posted for #2.

Code:
4. Can be rearranged with the shift command
The postional arguments gets shifted one place to the left when you make one shift call. i.e. $1 will get the value that was held by $2, $2 will get the value that was held by $3.. so on and so forth..
$0 never gets shifted.
I do understand how shift works now.

Thank you,
Eric
Reply With Quote
  #4  
Old 10-22-2005
vino's Avatar
Supporter (in vino veritas)
 

Join Date: Feb 2005
Location: Bangalore, India
Posts: 2,683
There are a few examples on the use of positional parameters - Positional Parameters
Reply With Quote
  #5  
Old 10-22-2005
Perderabo's Avatar
Unix Daemon
 

Join Date: Aug 2001
Location: Washington DC Area
Posts: 8,613
The Bourne shell does not support ${10}. Here is an example where I tried it:
Code:
$ set one two three four five six seven eight nine ten eleven
$ echo $1
one
$ echo ${1}
one
$ echo $9
nine
$ echo ${10}
bad substitution
$ shift
$ echo $9
ten
$
The Korn shell and Bash both do support it. But not the old Bourne shell. The Bourne shell is very old. Replacements have been available since at least 1988. I don't understand why people would use it for new scripts. The Posix standard mandates a newer shell. Any version of Unix that does not have a modern shell available is in violation of the standard.
Reply With Quote
  #6  
Old 10-22-2005
Registered User
 

Join Date: Oct 2005
Posts: 22
That's good to know.

Thanks for the clarification.

Eric
Reply With Quote
  #7  
Old 10-22-2005
Registered User
 

Join Date: Oct 2005
Posts: 22
OK, after reading the linked lesson (Lesson 13: Positional Parameters), I have written a test program. This program is called "positional_parameters":
Code:
set -vx

set

echo "Positional Parameters"

# The following commented lines do not work.
# Is it because I am using the Bourne Shell?
# if["$1"!=""];
# then echo "Positional parameter 1 contains something."
# else echo "Positional parameter 1 is empty."
# fi

# if[ $# -gt 0 ]; then
# echo "Your command line contains $# arguments"
# else echo "Your command line contains no arguments"
# fi

echo '$0 = ' $0
echo '$1 = ' $1
echo '$2 = ' $2
echo '$3 = ' $3

banner $1 $2 $3
banner "$1 $2 $3"

banner "$*"
banner "$@"

# mailtolist=someName@someDomain.com

mailtolist=someName@someDomain.com

mail mailtolist < testing

set +vx
The following are the contents of the "testing" file:
Code:
banner testing
banner 1 2 3 4
I am getting the following error when I run the positional_parameters program:
Code:
mailtolist... User unknown
Am I not initializing it correctly?

Is it possible for the mailtolist variable to contain more than one e-mail address?

I would like to try to invoke the positional_parameters program from the command line and send the contents of my testing file to my e-mail address.
Would this be the correct command?
Code:
$> positional_parameters testing
Do I need to export mailtolist?
Do I need to use command substitution to test it?

I appreciate the feedback. I am enjoying what I am learning so far.

Thank you,
Eric

Last edited by ericelysia; 10-22-2005 at 08:05 AM.
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools
Display Modes




All times are GMT -7. The time now is 09:36 AM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008. All Rights Reserved.Ad Management by RedTyger Visit The Complex Event Processing Blog

Content Relevant URLs by vBSEO 3.2.0