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.
BeefStu
December 16, 2010, 3:58pm
2
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
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}"