Regarding the shift command???

I am running a program where in I have this command
which is giving error the shift: number is not correct.
can you please tell me how shift actually works?

the line which is giving error is-
set $PARAM; shift; shift; shift; shift; shift; shift; shift; shift

Is it related somewhere to these parameters which is set before this line
PARAM=$*

case "$1" in
"-h"|"-H"\)
	give_help
	exit -1
	;;
"-p"|"-P"\)
	give_params
	exit -1
	;;
esac

eval REQID=\`echo $PARAM	| awk '	\{	split\($2, var, "="\)
					printf\("%s", var[2]\) \}'\`
eval LOGIN=\`echo $PARAM	| awk ' \{	split\($3, var, "="\)
					printf\("%s", var[2]\) \}'\`
eval USRID=\`echo $PARAM	| awk ' \{	split\($4, var, "="\)
					printf\("%s",var[2]\) \}'\`
eval USRNM=\`echo $PARAM	| awk ' \{	split\($5, var, "="\)
					printf\("%s", var[2]\) \}'\`
eval PRINT=\`echo $PARAM	| awk ' \{	split\($6, var, "="\)
					printf\("%s", var[2]\) \}'\`
eval SVOUT=\`echo $PARAM	| awk ' \{	split\($7, var, "="\)
					printf\("%s", var[2]\) \}'\`
eval COPNO=\`echo $PARAM	| awk ' \{	split\($8, var, "="\)
					printf\("%s", var[2]\) \}'\`

export	PARAM		\\
	REQID		\\
	LOGIN		\\
	USRID		\\
	USRNM		\\
	PRINT		\\
	SVOUT		\\
	COPNO

If the number of shift commands is more than the number of parameters to your script then you will get the error shift: number is not correct.

I think you dont need set and shift commands.

"The positional parameters from $N+1 ... are renamed to $1 ... If N is not given, it is assumed to be 1.
"

The is the same as:

shift 8

Have you checked whether there are as many as 8 parameters?

What ARE you trying to do? What is the point of resetting the already existing parameters? And if you do it that way, you will also be performing word splitting on the parameters.

I'm not going to correct that convoluted code. There are far too many things wrong with it.

Read the man page for your shell, and learn to use getopts.