Re: shell command line argument + parsing function

2009-09-01 Thread Artis Caune
2009/8/31 Stefan Miklosovic :
> hi,
>
> assuming I execute shell script like this
>
> $ ./script -c "hello world"
>
> I want to save "hello world" string to variable COMMENT in shell script.
>
> code:
>
> #!/bin/sh
>
> parse_cmdline() {
>    while [ $# -gt 0 ]; do
>        case "$1" in
>            -c)
>                shift
>                COMMENT="$1"
>                ;;
>        esac
>        shift
>    done
> }
>
> parse_cmdline $*
>
> echo $COMMENT
>
> exit 0




How about getopts builtin, so you can use:
./script -c "hello world" or
./script -c"hello world" or


while getopts c: f; do
case $f in
c)
COMMENT=$OPTARG
;;
\?)
echo 'usage: $0 [-c string]'
exit 1
;;
esac
done

echo "COMMENT: $COMMENT"




-- 
Artis Caune

Everything should be made as simple as possible, but not simpler.
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"


Re: shell command line argument + parsing function

2009-08-30 Thread Erik Trulsson
On Mon, Aug 31, 2009 at 01:07:36AM +0200, Stefan Miklosovic wrote:
> hi,
> 
> assuming I execute shell script like this
> 
> $ ./script -c "hello world"
> 
> I want to save "hello world" string to variable COMMENT in shell script.
> 
> code:
> 
> #!/bin/sh
> 
> parse_cmdline() {
> while [ $# -gt 0 ]; do
> case "$1" in
> -c)
> shift
> COMMENT="$1"
> ;;
> esac
> shift
> done
> }
> 
> parse_cmdline $*
> 
> echo $COMMENT
> 
> exit 0
> 
> but that only write out "hello". I tried to change $* to $@, nothing
> changed.

But if you use "$@" (with the quote marks) instead it should work fine.
For further explanation please read the sh(1) man page where it explains the
special parameters $* and $@, while paying special attention to how they
expand when used within double-quotes.


> 
> It is interesting, that if I dont put "while" loop into function
> parse_cmdline,
> and do echo $COMMENT, it writes "hello world".
> 
> I WANT that function style. How to do it ?
> 
> thank you
> ___
> freebsd-questions@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

-- 

Erik Trulsson
ertr1...@student.uu.se
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"


Re: shell command line argument + parsing function

2009-08-30 Thread Stefan Miklosovic
hehe :D

easy as hell, one has to enclose argument of parse_cmdline into brackets :)

parse_cmdline "$@"

sorry for noise

On Mon, Aug 31, 2009 at 1:07 AM, Stefan Miklosovic <
miklosovic.free...@gmail.com> wrote:

> hi,
>
> assuming I execute shell script like this
>
> $ ./script -c "hello world"
>
> I want to save "hello world" string to variable COMMENT in shell script.
>
> code:
>
> #!/bin/sh
>
> parse_cmdline() {
> while [ $# -gt 0 ]; do
> case "$1" in
> -c)
> shift
> COMMENT="$1"
> ;;
> esac
> shift
> done
> }
>
> parse_cmdline $*
>
> echo $COMMENT
>
> exit 0
>
> but that only write out "hello". I tried to change $* to $@, nothing
> changed.
>
> It is interesting, that if I dont put "while" loop into function
> parse_cmdline,
> and do echo $COMMENT, it writes "hello world".
>
> I WANT that function style. How to do it ?
>
> thank you
>
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"


Re: shell command line argument + parsing function

2009-08-30 Thread Bill Campbell
On Mon, Aug 31, 2009, Stefan Miklosovic wrote:
>hi,
>
>assuming I execute shell script like this
>
>$ ./script -c "hello world"
>
>I want to save "hello world" string to variable COMMENT in shell script.
>
>code:
>
>#!/bin/sh
>
>parse_cmdline() {
>while [ $# -gt 0 ]; do
>case "$1" in
>-c)
>shift
>COMMENT="$1"
>;;
>esac
>shift
>done
>}
>
>parse_cmdline $*
>
>echo $COMMENT
>
>exit 0
>
>but that only write out "hello". I tried to change $* to $@, nothing
>changed.

Did you put $@ in quotes?  That is parse_cmdline "$@".  I haven't
tried this in calling functions in scripts, but use it frequently
when calling scripts from other scripts.  I would probably use
something like:

for arg in "$@"; do
dosomething "$arg"
done

Bill
-- 
INTERNET:   b...@celestial.com  Bill Campbell; Celestial Software LLC
URL: http://www.celestial.com/  PO Box 820; 6641 E. Mercer Way
Voice:  (206) 236-1676  Mercer Island, WA 98040-0820
Fax:(206) 232-9186  Skype: jwccsllc (206) 855-5792

Good luck to all you optimists out there who think Microsoft can deliver
35 million lines of quality code on which you can operate your business.
   -- John C. Dvorak
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"


shell command line argument + parsing function

2009-08-30 Thread Stefan Miklosovic
hi,

assuming I execute shell script like this

$ ./script -c "hello world"

I want to save "hello world" string to variable COMMENT in shell script.

code:

#!/bin/sh

parse_cmdline() {
while [ $# -gt 0 ]; do
case "$1" in
-c)
shift
COMMENT="$1"
;;
esac
shift
done
}

parse_cmdline $*

echo $COMMENT

exit 0

but that only write out "hello". I tried to change $* to $@, nothing
changed.

It is interesting, that if I dont put "while" loop into function
parse_cmdline,
and do echo $COMMENT, it writes "hello world".

I WANT that function style. How to do it ?

thank you
___
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"