Sponsored Content
Top Forums Shell Programming and Scripting $OPTARG changes commandline input Post 302412732 by thommes_pommes on Tuesday 13th of April 2010 11:00:27 AM
Old 04-13-2010
I'm afraid, that you don't understand my problem right now.

I'm reading many arguments with getopts from the commandline. Many of them are optional. My problem is, that I'm reading an argument, that includes an absolute path, as "/test/test*.sql". When I read the argument from $OPTARG, I found the joker "*" substituted with the first file, that matches, for example, "/test/test1.sql", but I need the non substituted argument, so that I can use the input.

So if I had a variable with "/test/test*.sql" I could do the following:

e.g.:

Code:
var_path="/test/test*.sql"

var_file_matches=`ls $var_path | wc -l`
if [ $var_file_matches -gt 1 ]
then
       echo "More than one match with you argument, BREAK!"
       exit 99
fi

.
.
.
other programmcode



This is the part in my script, reading arguments from the shell:

#! /usr/bin/ksh
.
.
.
Code:
while getopts ":rRvVHhk:K:FfQ:q:D:d:Z:z:s:S:p:P:cC" arg # Variablen einlesen 
   do 
        case $arg in 
        q|Q) 
                QUELL_PFAD="$OPTARG" 
                ;; 
        d|D) 
                QUELL_DATEI="$OPTARG" 
                ;; 
        k|K) 
                KONFIG_PFAD="$OPTARG" 
                ;; 
        s|S) 
                SQL_PFAD="$OPTARG" 
                ;; 
        p|P) 
                PARAMETER="$OPTARG" 
                ;; 
        z|Z) 
                ZIEL_PFAD="$OPTARG" 
                ;; 
        c|C) 
                COMPRESS_FLAG=1 
                ;; 
        h|H) 
                usage 
                exit_log 0 
                ;; 
        v|V) 
                version 
                exit_log 0 
                ;; 
        f|F) 
                FORCIERE_NEU_DIR=1 
                ;; 
        r|R) 
                REKURSIV_FLAG=1 
                ;; 
        *) 
                para_fehler 
                ;; 
        esac 
   done 
shift

 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Usage of optarg

Hello Friends, I need to pass arguments to a shell scripts. but for this i need to take the arguments only if they are supplied to the script as arguments. Like : Prompt > scriptname -d device_cd -s message so how do i capture these arguments ?> i think we have to use optarg.but i dont... (5 Replies)
Discussion started by: sveera
5 Replies

2. Programming

command line option: optarg

Hi I'm learning how to add in programm another option by command line. For example in the "my_prog" i want to add a " -k " option and then write a number. I mean: my_prog -k 50 and the i should use the number 50. I'm reading about getopt_long and optarg, and what i have done in the code... (0 Replies)
Discussion started by: Dedalus
0 Replies

3. Shell Programming and Scripting

OPTARG is not taking SPACE

Hi I have below code in one of my shell script: if ; then fail $USAGE; fi while getopts hz:r:t:dz: o do case "$o" in h) echo $USAGE ; exit 0;; r) export REQ_ID="$OPTARG";; t) TIMESPAN="$OPTARG";; d) detail="true";; ) ... (0 Replies)
Discussion started by: mohsin.quazi
0 Replies

4. Shell Programming and Scripting

Using curl in commandline

Hi, I am using curl to hit a url using http in solaris 10 using commandline, I want to transfer an attachment(using multipart curl -F) also as a part of the request. If anyone has used kindly help me with the syntax. I am using below command: /usr/local/bin/curl -v... (1 Reply)
Discussion started by: manishmaha
1 Replies

5. Shell Programming and Scripting

Pass date range into optarg

here is the code echo begin while getopts 1:2:3:4: mode do case $mode in 1)echo "You have chosen mode1" case $OPTARG in a) echo "User Specified Date Range" rangelist.sh ;; b) echo "user specified month and year";; ?) echo "Default, Current... (4 Replies)
Discussion started by: pravsripad
4 Replies

6. Shell Programming and Scripting

Multiple commandline switches

I have a script that has commandline switches that work no problem. But i don't know how to enable it to have multiple switches at one time. So I'd want myscript -h -o or even myscript -ho but i'm having no luck incorporating this. I tried shifting but i'm not getting it. Thanks ----------... (0 Replies)
Discussion started by: DC Slick
0 Replies

7. Shell Programming and Scripting

Checking commandline

mymk target How to check is on commandline or no? Cannot to find out ;( Know that I need to use if.....new in shell sorry Please use code tags next time for your code and data. (2 Replies)
Discussion started by: Manueldo
2 Replies

8. Shell Programming and Scripting

[BASH] getopts, OPTARG is passed but empty

EDIT: -- SOLVED -- Heyas, Getting used to optargs, but by far not understanding it. So i have that script that shall be 'changeable', trying to use the passed arguments to modify the script visuals. Passing: browser -t test -d sect $HOME Where -t should change the title, and -d... (0 Replies)
Discussion started by: sea
0 Replies

9. Shell Programming and Scripting

Getopts - space in argument (OPTARG)

Hi, I want to capture space as well from the argument eg: script.ksh -m "Message from xyz" -e "email@xyz.com" script.ksh -m 'Message from xyz' -e 'email@xyz.com' I am parsing using getopts, but for option "m" OPTARG is returning only "Message". Please use code tags next time for... (9 Replies)
Discussion started by: tostay2003
9 Replies
getopts(1)						      General Commands Manual							getopts(1)

NAME
getopts - Parses utility options SYNOPSIS
getopts optstring name [arg...] STANDARDS
Interfaces documented on this reference page conform to industry standards as follows: getopts: XCU5.0 Refer to the standards(5) reference page for more information about industry standards and associated tags. OPTIONS
None OPERANDS
A string containing the option characters recognized by the utility invoking getopts. If a character is followed by a colon (:), the option is expected to have an argument, which should be supplied as a separate argument. Applications should specify an option character and its option-argument as separate arguments, but getopts interprets the characters following an option character requiring arguments as an argument whether or not this is done. An explicit null option-argument is not recognized if it is not supplied as a separate argument when getopts is invoked. The characters question-mark (?) and colon (:) must not be used as option characters by an application. The use of other option characters that are not alphanumeric produces unspecified results. If the option-argument is not supplied as a separate argument from the option character, the value in OPTARG is stripped of the option character and the hyphen (-). The first character in opt- string determines getopts behavior if an option character is not known or an option-argument is missing. The name of a shell variable that is set by the getopts utility to the option character that was found. The getopts utility by default parses positional parameters passed to the invoking shell procedure. If args are given, they are parsed instead of the positional parameters. DESCRIPTION
The getopts utility is used to retrieve flags and flag-arguments from a list of parameters. Each time it is invoked, the getopts utility places the value of the next flag in the shell variable specified by the name operand and the index of the next argument to be processed in the shell variable OPTIND. Whenever the shell is invoked, OPTIND is initialized to 1. When the flag requires a flag-argument, the getopts utility places it in the shell variable OPTARG. If no flag is found, or if the flag found does not have a flag-argument, OPTARG is unset. If a flag character not contained in the optstring operand is found where a flag character is expected, the shell variable specified by name is set to the question-mark (?) character. In this case, if the first character in optstring is a colon (:), the shell variable OPTARG is set to the flag character found, but no output is written; otherwise, the shell variable OPTARG is unset and a diagnostic message writ- ten. This condition is considered to be an error detected in the way arguments were presented to the invoking application, but is not an error in getopts processing. If a flag-argument is missing, then: If the first character of optstring is a colon, the shell variable specified by name is set to the colon (:) character and the shell variable OPTARG is set to the flag character found. Otherwise, the shell variable specified by name is set to the question-mark (?) character, the shell variable OPTARG is unset, and a diagnostic message is written to standard error. This condition is considered to be an error detected in the way arguments were presented to the invoking application, but is not an error in getopts processing; a diagnostic message is written as stated, but the exit status is zero. When the end of flags is encountered the getopts utility exits with: A return value greater than zero The shell variable OPTIND set to the index of the first non-flag-argument, where the first -- argument is considered to be a flag-argument if there are no other non-flag-argu- ments appearing before it, or the value $# + 1 if there are no non-flag-arguments The name variable set to the question-mark (?) character Any of the following identifies the end of flags: The special flag -- Finding an argument that does not begin with a - Encountering an error The shell variables OPTIND and OPTARG are local to the caller of getopts and are not exported by default. The shell variable specified by the name operand, OPTIND and OPTARG affect the current shell execution environment. If the application sets OPTIND to the value 1, a new set of parameters can be used: either the current positional parameters or new arg values. Any other attempt to invoke getopts multiple times in a single shell execution environment with parameters (positional parameters or flag operands) that are not the same in all invocations, or with an OPTIND value modified to be a value other than 1, produces unspeci- fied results. NOTES
If getopts is called in a subshell or separate utility execution environment, such as one of the following it will not affect the shell variables in the caller's environment: (getopts abc value "$@") nohup getopts ... Shell functions share OPTIND with the calling shell even though the positional parame- ters are changed. Functions that want to use getopts to parse their arguments will usually want to save the value of OPTIND on entry and restore it before returning. However, there are cases when a function will want to change OPTIND for the calling shell. RESTRICTIONS
The getopts command is implemented as a shell built-in command. It is only available to users of the Korn (ksh) and POSIX shells. A similar capability is available to Bourne and C shell users with the getopt command. EXIT STATUS
The following exit values are returned: An option, specified or unspecified by optstring, was found. Successful completion. The end of options was encountered or an error occurred. EXAMPLES
The following example script parses and displays its arguments: aflag= bflag= while getopts ab: name do case $name in a) aflag=1;; b) bflag=1 bval="$OPTARG";; ?) printf "Usage: %s: [-a] [-b value] args " $0 exit 2;; esac done if [ ! -z "$aflag" ]; then printf "Option -a specified " fi if [ ! -z "$bflag" ]; then printf 'Option -b "%s" specified ' "$bval" fi shift $(($OPTIND - 1)) printf "Remaining arguments are: %s " "$*" ENVIRONMENT VARIABLES
The following environment variables affect the execution of getopts: Provides a default value for the internationalization variables that are unset or null. If LANG is unset or null, the corresponding value from the default locale is used. If any of the internationalization variables contain an invalid setting, the utility behaves as if none of the variables had been defined. If set to a non-empty string value, overrides the values of all the other internationalization variables. Determines the locale for the interpretation of sequences of bytes of text data as characters (for example, single-byte as opposed to multibyte characters in arguments and input files). Determines the locale used to affect the format and contents of diagnostic messages written to standard error. Determines the location of message catalogues for the processing of LC_MESSAGES. On exit, this variable will contain the value of a flag-argumentm if one was found, other- wise it is unset. This variable is used by the getopts utility as the index of the next argument to be processed. SEE ALSO
Commands: getopt(1), ksh(1), sh(1p) Routines: getopt(3) Standards: standards(5) getopts(1)
All times are GMT -4. The time now is 11:11 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy