Execution problem on kornshell

HI,

Requirement: I need to pass space between argument value for the paramter "GPG_PUBLIC_UID" but whenever i use single quotes or double quotes while supplying value for the arguments to the script, i see the value of the field "GPG_PUBLIC_UID" is getting splitted and my script fails to process with the actual value.
eg: i am trying to pass GPG_PUBLIC_UID= "ABCD DEFG" and my script splits them as GPG_PUBLIC_UID = "ABCD".

My script :

#!/bin/ksh
set -x
this=${0##*/};
params=$*
#--Read all parameters passed
for p in $params ;do
        eq=`echo $p|grep = >/dev/null 2>&1;echo $?`
        if [[ $eq -eq 0 ]]; then
                exc=`echo $p|egrep -e "SRC_DIR=|SRC_FILE=|TGT_DIR=|TGT_FILE=|MID_USER=|MID_HOST=|MID_DIR=|GPG_PUBLIC_UID=|REMOTE_USE
R=|REMOTE_HOST=|REMOTE_DIR=|TOUCH_FILE=">/dev/null 2>&1;echo $?`
                if [[ $exc -eq 0 ]]; then
                        name=`echo ${p%%=*}`
                        value=`echo ${p##*=}`
                        export $name=$value
                fi
        fi
done
#--As any required parameter missing check
echo "\nChecking if [[ -z ${SRC_DIR} ]] || [[ -z ${SRC_FILE} ]] || [[ -z ${TGT_DIR} ]] || [[ -z ${TGT_FILE} ]] || [[ -z ${MID_USER}
]] || [[ -z ${MID_HOST} ]] || [[ -z ${MID_DIR} ]] || [[ -z ${GPG_PUBLIC_UID} ]] || [[ -z ${REMOTE_USER} ]] || [[ -z ${REMOTE_HOST} ]
] || [[ -z ${REMOTE_DIR} ]] ||[[ -z ${TOUCH_FILE} ]]"
if [[ -z ${SRC_DIR} ]] || [[ -z ${SRC_FILE} ]] || [[ -z ${TGT_DIR} ]] || [[ -z ${TGT_FILE} ]] || [[ -z ${MID_USER} ]] || [[ -z ${MID
_HOST} ]] || [[ -z ${MID_DIR} ]] || [[ -z ${GPG_PUBLIC_UID} ]] || [[ -z ${REMOTE_USER} ]] || [[ -z ${REMOTE_HOST} ]] || [[ -z ${REMO
TE_DIR} ]] || [[ -z ${TOUCH_FILE} ]];
....
....

Pls guide me to proceed further.

Show me how your passing the variables as this seems to work for me.

cat xxx.ksh
 
#!/bin/ksh
echo "|$0|"
echo "|$1|"

Called like this:

./xxx.ksh GPG_PUBLIC_UID="ABCD DEFG"
|./xxx.ksh|
|GPG_PUBLIC_UID=ABCD DEFG|

Replace

params=$*
for p in $params ;do

by

 for p in "$@"; do

Thanks for response.

i changed as below and ran the script but i see the value getting splitted again :slight_smile:

params="$@"
echo " $Params is the params variable value"
#--Read all parameters passed
for p in $params ;do

Argument which i pass to script :

$DW_EXE/shell_handler.ksh dw_ad_users_info_fexp extract dw_ase.dw_ad_users_info_file_encrypt_test.ksh SRC_DIR=$DW_OUT/extract/dw_ase \
SRC_FILE=dw_ad_users_info_col_split.dat TGT_DIR=$DW_OUT/extract/ TGT_FILE=DD_2010-11-22.dat.gz.gpg \
MID_USER=ditg MID_HOST=aaaaa.sjc.com MID_DIR=/export/home/ \
GPG_PUBLIC_UID='aaaa data' REMOTE_USER=abdec \
 REMOTE_HOST=dev04.sjc.com REMOTE_DIR=/export/home/ TOUCH_FILE=DD_2010-11-22.done

Seems to be working as expected for me (in bash and ksh):

$ cat shell_handler.ksh 
#!/bin/ksh
params="$@"
echo " $Params is the params variable value"
#--Read all parameters passed
for p in $params ;do
    echo "|$p|"
done
 
$ ./shell_handler.ksh dw_ad_users_info_fexp extract dw_ase.dw_ad_users_info_file_encrypt_test.ksh SRC_DIR=$DW_OUT/extract/dw_ase \
> SRC_FILE=dw_ad_users_info_col_split.dat TGT_DIR=$DW_OUT/extract/ TGT_FILE=DD_2010-11-22.dat.gz.gpg \
> MID_USER=ditg MID_HOST=aaaaa.sjc.com MID_DIR=/export/home/ \
> GPG_PUBLIC_UID='aaaa data' REMOTE_USER=abdec \
> REMOTE_HOST=dev04.sjc.com REMOTE_DIR=/export/home/ TOUCH_FILE=DD_2010-11-22.done
  is the params variable value
|dw_ad_users_info_fexp|
|extract|
|dw_ase.dw_ad_users_info_file_encrypt_test.ksh|
|SRC_DIR=/extract/dw_ase|
|SRC_FILE=dw_ad_users_info_col_split.dat|
|TGT_DIR=/extract/|
|TGT_FILE=DD_2010-11-22.dat.gz.gpg|
|MID_USER=ditg|
|MID_HOST=aaaaa.sjc.com|
|MID_DIR=/export/home/|
|GPG_PUBLIC_UID=aaaa|
|data|
|REMOTE_USER=abdec|
|REMOTE_HOST=dev04.sjc.com|
|REMOTE_DIR=/export/home/|
|TOUCH_FILE=DD_2010-11-22.done|

Hi,

As you see the output:

 MID_HOST=aaaaa.sjc.com|
|MID_DIR=/export/home/|
|GPG_PUBLIC_UID=aaaa|
|data|

See the "aaaa data" is getting splitted inside the script which has to be changed like |GPG_PUBLIC_UID=aaaa data| .

OK, I see the problem. How about this.

#--Read all parameters passed
while [ $# -gt 0 ]
do
    case "$1" in
        SRC_DIR=*|SRC_FILE=*|\
        TGT_DIR=*|TGT_FILE=*|\
        MID_USER=*|MID_HOST=*|MID_DIR=*|GPG_PUBLIC_UID=*|\
        REMOTE_USER=*|REMOTE_HOST=*|REMOTE_DIR=*|TOUCH_FILE=*) \
            export ${1%%=*}="${1##*=}" ;;
    esac
    shift
done
#--As any required parameter missing check
echo "GPG_PUBLIC_UID=${GPG_PUBLIC_UID}"