fork download
  1. #!/bin/sh
  2.  
  3. # menu.sh
  4. # Description: Bash menu generator
  5. #
  6. # Created by Jamie Cruwys on 21/02/2014.
  7. #
  8.  
  9. # Configuration
  10. symbol="*"
  11. paddingSymbol=" "
  12. lineLength=70
  13. charsToOption=1
  14. charsToName=3
  15.  
  16. function generatePadding() {
  17. string="";
  18. for (( i=0; i < $2; i++ )); do
  19. string+="$1";
  20. done
  21. echo "$string";
  22. }
  23.  
  24. # Generated configs
  25. remainingLength=$(( $lineLength - 2 ));
  26. line=$(generatePadding "${symbol}" "${lineLength}");
  27. toOptionPadding=$(generatePadding "${paddingSymbol}" "${charsToOption}");
  28. toNamePadding=$(generatePadding "$paddingSymbol" "$charsToName");
  29.  
  30. # generateText (text)
  31. function generateText() {
  32. totalCharsToPad=$((remainingLength - ${#1}));
  33. charsToPadEachSide=$((totalCharsToPad / 2));
  34. padding=$(generatePadding "$paddingSymbol" "$charsToPadEachSide");
  35. totalChars=$(( ${#symbol} + ${#padding} + ${#1} + ${#padding} + ${#symbol} ));
  36. if [[ ${totalChars} < ${lineLength} ]]; then
  37. echo "${symbol}${padding}${1}${padding}${paddingSymbol}${symbol}";
  38. else
  39. echo "${symbol}${padding}${1}${padding}${symbol}";
  40. fi
  41. }
  42.  
  43. # generateTitle (title)
  44. function generateTitle() {
  45. echo "$line"
  46. generateText ""
  47. generateText "$1"
  48. generateText ""
  49. echo "$line"
  50. }
  51.  
  52. # generateOption (dialogType, optionNumber, optionName)
  53. function generateOption() {
  54. tempOptionPadding=$toOptionPadding
  55. tempNamePadding=$toNamePadding
  56. if [[ $1 == "options" ]]; then
  57. if [[ $3 == "Exit" ]] || [[ $3 == "Return to the main menu" ]]; then
  58. optionString="[0]"
  59. else
  60. optionString="[$2]"
  61. fi
  62. elif [[ $1 == "instructions" ]]; then
  63. optionString="$2."
  64. fi
  65. charsToPadName=$(( ${lineLength} - ${#symbol} - ${#tempOptionPadding} - ${#optionString} - ${#tempNamePadding} - ${#3} - ${#symbol} ));
  66. namePadding=$(generatePadding "$paddingSymbol" "$charsToPadName");
  67. echo "${symbol}${tempOptionPadding}${optionString}${tempNamePadding}${3}${namePadding}${symbol}";
  68. }
  69.  
  70. # generateOptionsFromArray (dialogType, array[options])
  71. function generateOptionsFromArray() {
  72. index=1
  73. generateText ""
  74. for OPTION in "${@:2}"
  75. do
  76. if [[ "$1" == "message" ]]; then
  77. generateText "$OPTION"
  78. else
  79. generateOption "$1" "$index" "$OPTION"
  80. fi
  81. ((index++))
  82. done
  83. generateText ""
  84. }
  85.  
  86. # generateDialog (dialogType, dialogTitle, array[options])
  87. function generateDialog() {
  88. generateTitle "$2"
  89. generateOptionsFromArray "$1" "${@:3}"
  90. echo "$line";
  91. }
  92.  
  93. # generateGoBackDialog (name, isNewLine)
  94. function generateGoBackDialog() {
  95. if [[ $2 == "true" ]]; then
  96. echo -e "\n$line"
  97. else
  98. echo -e "$line"
  99. fi
  100. generateText ""
  101. generateOption "options" "0" "$1"
  102. generateText ""
  103. echo -e "$line"
  104. }
  105.  
  106. # generateMessageDialog (title, array[message])
  107. function generateMessageDialog() {
  108. if [[ "${#1}" > 0 ]]; then
  109. generateTitle "$1"
  110. fi
  111. generateOptionsFromArray "message" "${@:2}"
  112. echo "$line"
  113. }
  114.  
Success #stdin #stdout 0s 4408KB
stdin
Standard input is empty
stdout
Standard output is empty