Ok, je pensais que le script créait un lanceur pour l'utilisateur directement mais apparemment il veut le fait dans le dossier de Zotero. Et donc, comme il est dans un dossier système, il faut avoir les droits admin pour écrire dedans.
Relance la commande avec sudo :
cd /opt/zotero
sudo ./set_launcher_icon
Il va vraisemblablement mettre à jour le zotero.desktop qui existe déjà dans le dossier avec le bon chemin.
Et du coup, il faut effectivement faire un lien symbolique, soit dans le dossier des lanceurs système (/usr/share/applications) pour tous les utilisateurs, soit dans celui de ton compte (~/.local/share/applications) juste pour toi. Je suppose que tu es le seul utilisateur sur ta machine, donc on va le faire dans ce dernier dossier :
ln -sf /opt/zotero/zotero.desktop ~/.local/share/applications/zotero.desktop
Cette commande va écraser le lanceur précédent que tu avais mal fait, au cas où tu ne l'aies pas supprimé.
Pour tes questions à la fin, il faut bien comprendre que le système de fichiers Linux est une abstraction où tout part de la racine (le dossier au plus bas niveau). La racine en question, c'est / (slash). Le dossier /opt est donc un dosier "opt" qui est à la racine. Et donc, si tu es dans /opt (ou ailleurs) et que tu tapes
cd /Zotero, ça veut dire que tu veux accéder à un dossier "Zotero" se trouvant à la racine ; alors que si tu tapes
cd Zotero c'est un dossier "Zotero" sans chemin indiqué, qui est par conséquent traité à partir du dossier courant. /opt/zotero, c'est un dossier "zotero", qui se trouve dans "opt", qui lui-même se trouve à la racine. Au passage, attention : Linux fait la différence entre majuscules et minuscules, "zotero" et "Zotero" sont deux noms de dossiers différents.