shellcheck.sh 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #!/bin/sh
  2. # Note use sh and not bash!
  3. # To be used with in shellcheck and automated usage
  4. # Generate timestamp
  5. # If logging specified, export shellcheck output to log
  6. # Excluded codes
  7. # SC2086 = SC2086: Double quote to prevent globbing and word splitting. - Keep it more readable please use them with v-xxx-commands when used user input might be not validated corrections and whitespaces might cause a risk
  8. # SC2002: Useless cat. Consider 'cmd < file | ..' or 'cmd file | ..' instead.
  9. # Check exit code directly with e.g. 'if mycmd;', not indirectly with $?. Might be worth disable in in the future
  10. # SC2181: Check exit code directly with e.g. 'if mycmd;', not indirectly with $?.
  11. # SC2153: Possible misspelling: DOMAIN may not be assigned, but domain is. - Issues with SOURCE importing vars that are not defined in the script it self but config files
  12. # SC2016: Expressions don't expand in single quotes, use double quotes for that. - History reasons
  13. # SC2196: egrep is non-standard and deprecated. Use grep -E instead. Todo be removed in the future
  14. # SC1090; Can't follow non-constant source. Use a directive to specify location. - Hestia loves $HESTIA/data/ips/$ip
  15. # SC2031: var was modified in a subshell. That change might be lost.
  16. # SC2010
  17. # SC2143
  18. # SC2046
  19. #set default value for error
  20. err=0;
  21. files=$(grep -rlE '#!/bin/(bash|sh)' ./ | grep -vE '\.(git|j2$|md$)');
  22. for file in $files; do
  23. echo "Linting: $file"
  24. shellcheck -x "$file" --severity="error" -e "SC2086,SC2002,SC2153,SC2181,SC2153,SC2129,SC2016,SC2196,SC1090,SC2031,SC2010,SC2143,SC2046"
  25. if [ $? -gt 0 ]; then
  26. printf "%s: \033[0;31m Fail \033[0m\n" "$file"
  27. err=1
  28. else
  29. # split loop in 2 parts allowing debuggin in earier stage
  30. printf "%s: \033[0;32m Success \033[0m\n" "$file"
  31. fi
  32. done
  33. if [ $err == 1 ];
  34. then
  35. exit "$err";
  36. fi
  37. for file in $files; do
  38. echo "Linting: $file"
  39. shellcheck -x "$file" -e "SC2086,SC2002,SC2153,SC2181,SC2153,SC2129,SC2016,SC2196,SC1090,SC2031,SC2010,SC2143,SC2046"
  40. done
  41. exit "$err";