Pourquoi ce script / fonction de bash bas ne fonctionne-t-il pas? Solutions possibles? (Script bash UNIX)

J’essaie de faire apparaître un message d’erreur si quelqu’un exécute mon script mais un fichier qui n’existe pas est entré en argument.

function finder(){ if test find $1 ; then exit 0 else exit 1 fi } #### error message if file does not exist if test finder -eq 1 ; then echo "safe_rm: cannot remove '$1' : No such file or directory" fi 

Je reçois un message d’erreur indiquant qu’un nombre entier est attendu de la fonction finger – mais cela ne devrait-il pas produire un état de sortie de 0 ou 1 en fonction de ma fonction?

comment puis-je faire une instruction if qui dit “Si le statut de finder est 1, alors echo” Aucun fichier ou répertoire n’existe “?

Tout conseil est apprécié!

Pourquoi pas si [-d / chemin / vers / dossier] ou si [-f / chemin / tp / fichier]

Plusieurs problèmes:

  1. exit arrête le script. Pour retourner une valeur d’une fonction, utilisez return .

  2. test ne prend pas de commande comme premier argument. Voir man test pour plus de détails.

  3. finder -eq 1 ne lance pas finder , il le prend comme une chaîne.

Ce que tu voulais vraiment dire était quelque chose comme

 if test -e "$1" ; then # ... else echo "$1 does not exists." fi 

Sinon, vous pouvez utiliser:

 if [ ! -e $1 ] ; then echo "safe_rm: cannot remove '$1' : No such file or directory" fi