2010-11-23 3 views
0

Eh bien, je suis actuellement un scripteur débutant. J'ai une connaissance de base d'autres langages de programmation tels que Javascript pour HTML, JScript, VB.NET et C++. (C++ Pas tellement, juste trempé mes pieds dans l'eau pour ça). Plus récemment, mon récent projet a tenté d'en apprendre le plus possible sur les scripts shell Bash. Le problème actuel consiste à comprendre les codes d'erreur d'état, ainsi qu'à vérifier si certains paramètres contiennent des répertoires ou s'ils existent. Je travaille à partir d'un livre, avec des tutoriels et des questions de révision. Malheureusement, il n'y a pas de clé de réponse, ou même des conseils pour cette question.BASH Aide à la création de scripts requise

  • Afficher un message d'erreur et la sortie avec état 1 si aucun paramètre ne donne
  • Afficher un message d'erreur et la sortie avec le statut 2 si la source est pas un répertoire
  • Afficher un message d'erreur et la sortie avec le statut 3 si la destination n'existe pas ou n'est pas un répertoire

Ce qui précède est ce que je dois faire, jusqu'à présent le premier que je crois avoir fait correctement, sinon s'il vous plaît, corrigez-moi, ou me guider dans la bonne direction . Comme j'apprends mieux quand des échantillons sont donnés, j'ai pensé que je demanderais de l'aide.

if [ $? ]; then 
    echo "You must supply at least one parameter" 
    exit 1 
fi 
    #The above is the part I am pretty sure is correct. 


if [ $? -d $directory "$1" ]; then 
    echo "$directory is not a directory" 
    exit 2 
fi 
#The above was self written. I am almost positive it is wrong. 

if [ $? -lt 2 ]; then 
    set "$1" .pwd 
fi 
#the above was given to me from the book as a reference point to start (tutorial) 

Répondre

2

$? est le code de retour d'une commande que vous exécutez. Peut-être que vous pensez que c'est un code de retour du script actuel. En tout cas ça ne fait pas ce que tu penses faire.

Tous mes exemples supposent que votre commande est exécutée comme ceci: script [source] [destination]

message d'erreur si aucun paramètre sont donnés:

if [ ! "$#" ]; then 
    echo "please supply a parameter" 
    exit 1 
fi 

Erreur d'affichage si la source est pas un répertoire

if [ ! -d "$1" ]; then 
    echo "$1 is not a directory" 
    exit 2 
fi 

Erreur d'affichage si la destination n'existe pas ou n'est pas un répertoire

if [ ! -d "$2" ]; then 
    echo "$2 doesn't exist or isn't a directory" 
    exit 3 
fi 
+0

Il doit y avoir un espace entre 'if' et' ['. «$ 1» et «$ 2» doivent être indiqués pour éviter la division du champ et la génération du chemin. '||' sépare les commandes de sorte que vous avez besoin de 'if [! -e "$ 2"] || [! -d "$ 2"]; then' (bien que le test '-e' soit redondant ici,' -d' renvoie déjà false s'il n'existe pas). – jilles

+0

merci @jiles. Changé selon vos suggestions – Cfreak

+0

Wow, maintenant que vous l'avez dit, j'aurais dû le faire moi-même. Je n'ai même pas essayé de l'essayer sur mon propre shell, mais juste de le regarder, il semble être 100% correct. J'apprécie la réponse rapide. Je vous remercie. –