Errores comunes en Bash

A modo de introducción muy breve, Bash es el intérprete de comandos o shell por defecto en la mayoría de las distribuciones basadas en Linux hoy en día.

Esta shell además provee un gran potencial para administradores de sistemas y programadores a la hora de procesar tareas administrativas y nos ofrece un lenguaje de script muy completo con el que podemos gestionar dichas tareas de forma programática.

El problema de este lenguaje es que aunque el paradigma de programación sea estructural, es, al menos para mi, es un poco raro y por lo tanto muy fácil de cometer errores.

Para evitar esto o ayudarnos con dicha tarea, en esta página podemos ver los errores más comunes que se cometen a la hora de escribir un script en Bash. A través de un total de 39 (en este momento), el autor nos expone el error, da una pequeña explicación del mismo y como solucionarlo.

Aquí os copio el índice de la página:

  1. for i in $(ls *.mp3)
  2. cp $file $target
  3. Filenames with leading dashes
  4. [ $foo = "bar" ]
  5. cd $(dirname "$f")
  6. [ "$foo" = bar && "$bar" = foo ]
  7. [[ $foo > 7 ]]
  8. grep foo bar | while read -r; do ((count++)); done
  9. if [grep foo myfile]
  10. if [bar="$foo"]
  11. if [ [ a = b ] && [ c = d ] ]
  12. read $foo
  13. cat file | sed s/foo/bar/ > file
  14. echo $foo
  15. $foo=bar
  16. foo = bar
  17. echo <<EOF
  18. su -c 'some command'
  19. cd /foo; bar
  20. [ bar == "$foo" ]
  21. for i in {1..10}; do ./something &; done
  22. cmd1 && cmd2 || cmd3
  23. echo "Hello World!"
  24. for arg in $*
  25. function foo()
  26. echo "~"
  27. local varname=$(command)
  28. sed 's/$foo/good bye/'
  29. tr [A-Z] [a-z]
  30. ps ax | grep gedit
  31. printf "$foo"
  32. for i in {1..$n}
  33. if [[ $foo = $bar ]] (depending on intent)
  34. if [[ $foo =~ 'some RE' ]]
  35. [ -n $foo ] or [ -z $foo ]
  36. [[ -e "$broken_symlink" ]] returns 1 even though $broken_symlink exists
  37. ed file <<<"g/d\{0,3\}/s//e/g" fails
  38. expr sub-string fails for "match"
  39. On UTF-8 and Byte-Order Marks (BOM)