Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I know that shell scripts just run commands as if they were executed in at the command prompt. I'd like to be able to run shell scripts as if they were functions... That is, taking an input value or string into the script. How do I approach doing this?

share|improve this question
add comment

4 Answers

up vote 8 down vote accepted

The shell command and any arguments to that command appear as numbered shell variables: $0 has the string value of the command itself, something like script, ./script, /home/user/bin/script or whatever. Any arguments appear as "$1", "$2", "$3" and so on. The count of arguments is in the shell variable "$#".

Common ways of dealing with this involve shell commands getopts and shift. getopts is a lot like the C getopt() library function. shift moves the value of $2 to $1, $3 to $2, and so on; $# gets decremented. Code ends up looking at the value of "$1", doing things using a caseesac to decide on an action, and then doing a shift to move $1 to the next argument. It only ever has to examine $1, and maybe $#.

share|improve this answer
2  
the C getopt() is an extremely established standard, but the getopt executable is not the same across distro/platform. I'm a now fully converted getopts user, as it is a POSIX standard. It works great with dash also, which is my preferred script shell –  TechZilla Feb 10 '12 at 23:40
add comment
./myscript myargument

myargument becomes $1 inside myscript.

share|improve this answer
add comment
$/shellscriptname.sh argument1 argument2 argument3 

You can also pass output of one shell script as an argument to another shell script.

$/shellscriptname.sh "$(secondshellscriptname.sh)"

Within shell script you can access arguments with numbers like $1 for first argument and $2 for second argument and so on so forth.

More on shell arguments

share|improve this answer
add comment

You can access passed arguments with $n where n is the argument number - 1, 2, 3, .... You pass the arguments just like you would with any other command.

$ cat myscript
#!/bin/bash
echo "First arg: $1"
echo "Second arg: $2"
$ ./myscript hello world
First arg: hello
Second arg: world
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.