PERT est une méthodologie de gestion de projet. Il s'agit d'un fork du programme bash qui permet d'afficher les tâches et les prévisions individuels et cumulés : https://github.com/arzzen/pert
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

pert 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/bash
  2. # help text
  3. if [ -z "$1" ] || [[ "$1" =~ [-]*(help|h) ]]; then
  4. echo -e "\nA command line PERT calculator for quick estimates."
  5. echo -e "Comma separated task list in the form \"1,2,12 4,5,9 2,3,6\", where whitespace separates tasks.\n"
  6. echo -e "Usage:\n\tpert [optimistic,realistic,pessimistic]\n"
  7. exit 1
  8. fi
  9. header="\n %-12s |%11s |%10s |%12s |%9s |%7s |%9s\n"
  10. format=" %-12s |%11s |%10s |%12s |%9s |%7s |%9s\n"
  11. divider=------------------------------
  12. divider=" "$divider$divider$divider
  13. width=83
  14. scale=2
  15. counter=0
  16. total_estimate=0
  17. total_standard_deviation=0
  18. total_variance=0
  19. for var in "$@"; do
  20. # counter iterator
  21. counter=$[$counter +1]
  22. # split values
  23. IFS=',' read -ra ADDR <<< "$var"
  24. # optimistic value
  25. o=${ADDR[0]}
  26. # realistic value
  27. r=${ADDR[1]}
  28. # pessimistic value
  29. p=${ADDR[2]}
  30. # header
  31. if [[ $counter = 1 ]]; then
  32. printf "$header" "task" "optimistic" "realistic" "pessimistic" "duration" "risk" "variance"
  33. printf "%$width.${width}s\n" "$divider"
  34. fi
  35. # check values
  36. if [ -z "$o" ] || [ -z "$r" ] || [ -z "$p" ]; then
  37. #echo -e "\tbad input [$o,$r,$p]"
  38. printf "$format" "$counter. bad input" $o $r $p
  39. else
  40. # pert estimate
  41. pert_estimate=$(echo "scale=$scale; ($o+4*$r+$p)/6" | bc -l | sed 's/^\./0./')
  42. total_estimate=$(echo "scale=$scale; $total_estimate + $pert_estimate" | bc -l | sed 's/^\./0./')
  43. # standard deviation
  44. standard_deviation=$(echo "scale=$scale; ($p-$o)/6" | bc -l | sed 's/^\./0./')
  45. total_standard_deviation=$(echo "scale=$scale; $total_standard_deviation + $standard_deviation" | bc | sed 's/^\./0./')
  46. # variance
  47. variance=$(echo "scale=$scale; $standard_deviation*$standard_deviation" | bc -l | sed 's/^\./0./')
  48. total_variance=$(echo "scale=$scale; $total_variance + $variance" | bc | sed 's/^\./0./')
  49. # row
  50. printf "$format" "$counter. task" $o $r $p $pert_estimate $standard_deviation $variance
  51. fi
  52. done
  53. if [[ $total_estimate > 0 ]]; then
  54. # footer
  55. printf "%$width.${width}s\n" "$divider"
  56. printf "$format" "summary" "-" "-" "-" $total_estimate $total_standard_deviation $total_variance
  57. echo -e "\nThree point estimate:"
  58. fi
  59. echo -e "\n"