A maior parte é shell, e isso é incorreto porque faltam espaços em branco na primeira instrução if. Também
- o primeiro if-statement não possui um equilíbrio
fi
- o
$@
deve ser cotado"$@"
- o
$2
provavelmente deve ser$v2
O teste -d
é suspeito, já que o gawk deveria estar imprimindo um número (não um nome de diretório). Ainda assim, você poderia estar testando um diretório nomeado para um número ...
Como sugerido em um comentário, se você fez essas correções, o script tentaria remover tudo que não é o mesmo que o último parâmetro do script e criar um link para esses arquivos removidos no diretório nomeado pelo parâmetro final . (Apenas usando mv
seria mais simples).
Aqui está um script fixo sugerido:
#! /bin/bash
v='echo "$@"|gawk '{print $NF}''
if [ -d $v ];then
for v2 in "$@";do
if test $v2 != $v;then
ln $v2 $v/$v2
rm $v2
fi
done
fi