Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. #!/bin/sh
  2. # Projet Make 25/11/2015
  3. # LAMRI Manal et VIRAG David
  4.  
  5.  
  6. #initialisation pour les options
  7. f=0
  8. k=0
  9. n=0
  10.  
  11.  
  12. while getopts "f:kn" option #while pour tester l'utilisation des options fkn
  13. do
  14. case $option in
  15. f) #si -f est utilise
  16. if [ -f $OPTARG ] #teste si le nouveau fichier existe ou pas
  17. then fichier="$OPTARG" #s'il existe, $fichier va stocker son nom
  18. f=1 #f=1 pour savoir que -f a ete utilise
  19. else echo "Fichier: $OPTARG pas trouve" #si le nouveau fichier n'existe pas on sort du programme
  20. exit 1
  21. fi
  22. ;;
  23.  
  24. k)
  25. k=1
  26. ;;
  27.  
  28. n)
  29. n=1
  30. ;;
  31.  
  32. \?)
  33. echo "option invalide"
  34. exit 1
  35. ;;
  36.  
  37. esac
  38. done
  39.  
  40. if [ $# -eq 0 ] #teste le nombre d'arguments
  41. then
  42. echo "Usage: $0 cible manquante">&2
  43. exit 1
  44. fi
  45.  
  46.  
  47.  
  48. if [ $f -eq 0 ] #on cherche si le makefile commence par une majuscule ou minuscule
  49. then
  50. find "makefile"
  51. if [ $? -eq 0 ]
  52. then fichier="makefile"
  53. else
  54. find "Makefile"
  55. if [ $? -eq 0 ]
  56. then fichier="Makefile"
  57. fi
  58. fi
  59. fi
  60.  
  61. #on va supprimer les lignes vides et les commentaires pour stocker dans make_tmp puis dans $fichier
  62. cat "$fichier" | sed '/^$/d' | sed '/^#/d' > make_tmp
  63. fichier="make_tmp"
  64. #cat $fichier
  65.  
  66.  
  67. #$1 devient la cible
  68. while [ $# -gt 1 ]
  69. do
  70. shift
  71. done
  72.  
  73. cible=$1
  74. #echo "cible=$cible"
  75.  
  76. #recuperation de la ligne de la cible
  77. l_cible=`cat $fichier | sed -n "/^$cible:.*/p"`
  78. #echo "l_cible=$l_cible"
  79.  
  80. #recuperation des prerequis
  81. prerequis=`echo $l_cible | cut -d ":" -f2 | sed 's/^.$//'`
  82. #echo "prerequis=$prerequis"
  83.  
  84. #recuperation du numero de ligne de la cible
  85. no_l_cible=`cat $fichier | grep -n "$l_cible" | cut -d ":" -f1 `
  86. #echo "no_l_cible=$no_l_cible"
  87.  
  88. #recuperation de la taille du fichier final (nombre de lignes)
  89. nblignes=`cat $fichier | wc -l`
  90. #echo "nblignes=$nblignes"
  91.  
  92.  
  93. echo "arg1=$1"
  94.  
  95. #pour chaque prerequis
  96. for pq in $prerequis
  97. do
  98. echo "prerequis=$pq"
  99. test=`cat $fichier | sed -n "/^$pq:.*/p"`
  100. # echo "test=$test"
  101. if [ -f $pq ] #si le prerequis existe deja
  102. then
  103. recente=`find -newer "$cible" -name "$pq"` #on regarde si le prerequis est plus recent que la cible
  104. if [ -n "$recente" ]
  105. then #si le
  106. if [ -n "$test" ]
  107. then
  108. sh $0 $pq
  109. else sh $0 $pq
  110.  
  111. fi
  112.  
  113. fi
  114. else #si $pq n'existe pas encore on execute la cible
  115. if [ -n "$test" ] || [ $k -eq 1 ]
  116. then if [ $n -eq 1 ]
  117. then sh $0
  118. else if [ $k -eq 1 ]
  119. then sh $0 #recursion
  120. else sh $0
  121. fi
  122. fi
  123. else echo "Impossible d'executer"
  124. exit 1
  125. fi
  126. fi
  127. done
  128.  
  129.  
  130. for i in `seq $(($no_l_cible + 1)) $nblignes`
  131. #on boucle a partir de la cible donnee
  132. do
  133. test2=`cat $fichier | sed -n "$i p" | sed 's/^.//' `
  134. #echo "test2=$test2"
  135. if [ -n "$test2" ]
  136. then
  137. exec=`cat $fichier | sed -n "$i p" | sed 's/://' ` #on cherche le commandes a executer
  138. #echo "exec=$exec"
  139. if [ $n -eq 0 ] && [ $(echo "$exec" | grep ":" | wc -l) -eq 0 ]
  140. then
  141. if [ $k -eq 1 ]
  142. then sh -c "$exec" # si l'option k est utilise on continue meme si une commande retourne une erreur
  143. else sh -c "$exec" || exit 1 #ici on tient compte des erreurs et s'arrete si'l y a une erreur
  144. fi
  145. fi
  146.  
  147. if [ $n -eq 1 ] #pour lister les commandes
  148. then
  149. echo "Commande a executer: $exec"
  150. fi
  151. else
  152. break #quand on tombe sur une autre cible on break
  153. fi
  154. done
  155. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement