Parece que você quer algo assim:
#!/usr/bin/env bash
while :; do
read -r -p 'Source: ' source
read -r -p 'Destination: ' destination
[[ $destination != */* ]] || mkdir -p -- "${destination%/*}" &&
ln -s -- "${source}" "${destination}"
read -r -p 'Exit? (type "e" to exit): '
[[ "${REPLY}" == 'e' ]] && break
done
Exemplo:
$ cd ~/Desktop
$ ls -l
total 0
$ touch file
$ ls -l
total 0
-rw-rw-r-- 1 a a 0 sep 11 03:13 file
$ my_script.sh
Source: ./file
Destination: ./dir/file_copy_1
Exit? (type "e" to exit):
Source: ./file
Destination: ./dir/file_copy_2
Exit? (type "e" to exit): e
$ ls -l ./dir
total 2
lrwxrwxrwx 1 a a 6 sep 11 03:15 file_copy_1 -> ./file
lrwxrwxrwx 1 a a 6 sep 11 03:15 file_copy_2 -> ./file
Eu não conseguia entender completamente sua pergunta sobre mkdir
ing o diretório excluindo o nome do arquivo (desculpe, eu não sou um falante nativo de inglês), então eu apenas improvisei essa parte, mas se você me der mais exemplos sobre o que você quer exatamente que eu possa te ajudar.