2012-07-20 8 views
2

J'ai écrit un petit script avec lequel je prends le nom d'un fichier.devis de script shell

#objectname 
echo "objectname" 
read ON 

Impossible de simplifier.

Je fais un traitement avec le fichier que je reçois.

gpg -c --no-use-agent "$ON" 

Par exemple, si j'ai un fichier a.exe -> Il va chiffrer et me donner un fichier avec un autre md5 et une extension. Maintenant, le fichier ressemble à ceci a.exe.gpg

Maintenant, si je lui donne un lien, le nom du fichier directement.

comme celui-ci par exemple: Extrait de: ce link

# This works 
fileName='a.exe.gpg' 
md5sum=$(md5sum ${fileName}) 
echo $md5sum 

retourne correctement. Et si je veux le faire dynamiquement.

C'est ce que j'ai essayé:

#does not work 
gpg -c --no-use-agent "$ON" 
fileName= `$ON.gpg` 
md5sum= $(md5sum ${fileName}) 
echo $md5sum 

Je reçois ce bug ici: upload.sh: 1: upload.sh: Fire.exe.gpg: not found et le programme ne sort pas. Puis-je demander où est exactement l'erreur que je commets?

Répondre

3

L'erreur est ici:

fileName= `$ON.gpg` 
  1. Il devrait y avoir aucun espace après =. (Regardez également la ligne suivante.)
  2. Vous avez utilisé des guillemets, qui exécutent$ON.gpg plutôt que de simplement l'évaluer. Back-quotes sont les mêmes que $(...) mais moins élégant. Utilisez des guillemets pour cela.

Lire Greg's wiki entry on quotes pour une explication ultra détaillée avec un commentaire opiniâtre. :-)

+0

Merci beaucoup pour ce lien! – user1524529

+0

Mon plaisir. L'ensemble du wiki est fascinant et extrêmement éducatif. Il est géré par un utilisateur qui fréquente le canal #bash sur FreeNode. Si vous y allez, préparez-vous à être insulté * et * éduqué. :-) – ghoti

1

Vous avez fait une erreur en corrigeant le nom de fichier.

fileName="$ON.gpg" 
+0

Je suis désolé mais j'ai une autre erreur maintenant: 'upload.sh: 48: upload.sh: 96b2edbf09638837d4c2feadb3d3bb3e: non found' – user1524529

+0

J'ai trouvé mon erreur maintenant :). Erreur d'espacement! – user1524529

2

Soyez prudent lorsque vous effectuez des affectations dans un script shell. N'utilisez pas d'espaces dans les côtés du operator=. Essayez les solutions suivantes:

fileName="$ON.gpg" 
md5sum=$(md5sum ${fileName}) 

Notez que la variable et l'affectation operator= sont ensemble sans espace.

En outre, lorsque vous utilisez des guillemets comme `expression`, il sera exécuté par shell comme $(expression), comme indiqué par l'utilisateur ghoti.