Assuming your backup plan is to provide a list of files on standard input, one per line, and your main plan is to provide a list of files on the command line, one per arg:
#!/bin/bash
declare -a files # let's use an array to avoid whitespace tokenization
let filecnt=0
if [ "$#" -gt 0 ]; then
# we have args!
for f in "$@"; do
files[$filecnt]="$f"
((filecnt++))
done
else
# we have filenames on stdin!
while read -e line; do
files[$filecnt]="$line"
((filecnt++))
done
fi
# now do whatever you need to do with the filenames
for filename in "${files[@]}"; do
echo "$filename"
done
As is usual on Unix, Ctrl-D on its own line ends stdin, and allows the program to continue.
But you mentioned "drop", which makes me think what you'd really like is a drag-n-drop capability. For that, Platypus may be something to look into. I believe it will bundle your script into an app that makes a drag-n-drop target for you and passes the dropped files as args to your script.
Update: If you wanted to have files with just any old whitespace between them, so multiple files could be on the same line, replace that while loop with:
while read -ea lfiles; do
for f in "${lfiles[@]}"; do
files[$filecnt]=$f
((filecnt++))
done
done
Or if you expect only one line with all the files on it, you can simplify this whole while loop to:
read -ea files
Be aware, however, that with this approach, you must type a backslash in front of any space that you actually want to be part of your file or directory path, or the script will parse your pathname as multiple separate files! (Drag-n-drop from the Finder onto the Terminal will automatically do this backslash-escaping for you, though.)