Bash shell FAQ

Below is impressive FAQ on bash (GNU command language interpreter) shell. It’s taken from here (thanks to maintainers!).

  1. How can I read a file line-by-line?
  2. How can I store the return value of a command in a variable?
  3. How can I insert a blank character after each character?
  4. How can I check whether a directory is empty or not?
  5. How can I use array variables?
  6. How can I use variable variables (indirect variables, pointers, references) or associative arrays?
  7. Is there a function to return the length of a string?
  8. How can I recursively search all files for a string?
  9. My command line produces no output: tail -f logfile | grep ‘foo bar’
  10. How can I recreate a directory structure, without the files?
  11. How can I print the n’th line of a file?
  12. A program (e.g. a file manager) lets me define an external command that an argument will be appended to – but i need that argument somewhere in the middle…
  13. How can I concatenate two variables? How do I append a string to a variable?
  14. How can I redirect the output of multiple commands at once?
  15. How can I run a command on all files with the extension .gz?
  16. How can I use a logical AND in a shell pattern (glob)?
  17. How can I group expressions, e.g. (A AND B) OR C?
  18. How can I use numbers with leading zeros in a loop, e.g. 01, 02?
  19. How can I split a file into line ranges, e.g. lines 1-10, 11-20, 21-30?
  20. How can I find and deal with file names containing newlines, spaces or both?
  21. How can I replace a string with another string in all files?
  22. How can I calculate with floating point numbers instead of just integers?
  23. I want to launch an interactive shell that has a special set of aliases and functions, not the ones in the user’s ~/.bashrc.
  24. I set variables in a loop. Why do they suddenly disappear after the loop terminates? Or, why can’t I pipe data to read?
  25. How can I access positional parameters after $9?
  26. How can I randomize (shuffle) the order of lines in a file? (Or select a random line from a file, or select a random file from a directory.)
  27. How can two processes communicate using named pipes (fifos)?
  28. How do I determine the location of my script? I want to read some config files from the same place.
  29. How can I display value of a symbolic link on standard output?
  30. How can I rename all my *.foo files to *.bar, or convert spaces to underscores, or convert upper-case file names to lower case?
  31. What is the difference between the old and new test commands ([ and [[)?
  32. How can I redirect the output of ‘time’ to a variable or file?
  33. How can I find a process ID for a process given its name?
  34. Can I do a spinner in Bash?
  35. How can I handle command-line arguments to my script easily?
  36. How can I get all lines that are: in both of two files (set intersection) or in only one of two files (set subtraction).
  37. How can I print text in various colors?
  38. How do Unix file permissions work?
  39. What are all the dot-files that bash reads?
  40. How do I use dialog to get input from the user?
  41. How do I determine whether a variable contains a substring?
  42. How can I find out if a process is still running?
  43. Why does my crontab job fail? 0 0 * * * some command > /var/log/mylog.`date +%Y%m%d`
  44. How do I create a progress bar?
  45. How can I ensure that only one instance of a script is running at a time (mutual exclusion)?
  46. I want to check to see whether a word is in a list (or an element is a member of a set).
  47. How can I redirect stderr to a pipe?
  48. Eval command and security issues
    1. Examples of bad use of eval
    2. Examples of good use of eval
    3. Alternatives to eval
  49. How can I view periodic updates/appends to a file? (ex: growing log file)
  50. I’m trying to construct a command dynamically, but I can’t figure out how to deal with quoted multi-word arguments.
  51. I want history-search just like in tcsh. How can I bind it to the up and down keys?
  52. How do I convert a file from DOS format to UNIX format (remove CRs from CR-LF line terminators)?
  53. I have a fancy prompt with colors, and now bash doesn’t seem to know how wide my terminal is. Lines wrap around incorrectly.
  54. How can I tell whether a variable contains a valid number?
  55. Tell me all about 2>&1 — what’s the difference between 2>&1 >foo and >foo 2>&1, and when do I use which?
  56. How can I untar or unzip multiple tarballs at once?
  57. How can group entries (in a file by common prefixes)?
  58. Can bash handle binary data?
  59. I saw this command somewhere: :(){ :|:& } (fork bomb). How does it work?
  60. I’m trying to write a script that will change directory (or set a variable), but after the script finishes, I’m back where I started (or my variable isn’t set)!
  61. Is there a list of which features were added to specific releases (versions) of Bash?
  62. How do I create a temporary file in a secure manner?
  63. My ssh client hangs when I try to run a remote background job!
  64. Why is it so hard to get an answer to the question that I asked in #bash ?
  65. Is there a “PAUSE” command in bash like there is in MSDOS batch scripts? To prompt the user to press any key to continue?
  66. I want to check if [[ $var == foo || $var == bar || $var == more ]] without repeating $var n times.
  67. How can I trim leading/trailing white space from one of my variables?
  68. How do I run a command, and have it abort (timeout) after N seconds?
  69. I want to automate an ssh (or scp, or sftp) connection, but I don’t know how to send the password….
  70. How do I convert Unix (epoch) timestamps to human-readable values?
  71. How do I convert an ASCII character to its decimal (or hexadecimal) value and back?
  72. How can I ensure my environment is configured for cron, batch, and at jobs?
  73. How can I use parameter expansion? How can I get substrings? How can I get a file without its extension, or get just a file’s extension?
  74. How do I get the effects of those nifty Bash Parameter Expansions in older shells?
  75. How do I use ‘find’? I can’t understand the man page at all!
  76. How do I get the sum of all the numbers in a column?
  77. How do I log history or “secure” bash against history removal?
  78. I want to set a user’s password using the Unix passwd command, but how do I script that? It doesn’t read standard input!
  79. How can I grep for lines containing foo AND bar, foo OR bar? Or for files containing foo AND bar, possibly on separate lines?
  80. How can I make an alias that takes an argument?
  81. How can I determine whether a command exists anywhere in my PATH?
  82. Why is $(…) preferred over `…` (backticks)?
  83. How do I determine whether a variable is already defined? Or a function?
  84. How do I return a string from a function? “return” only lets me give a number.
  85. How to write several times to a fifo without having to reopen it?
  86. How to ignore aliases or functions when running a command?
  87. How can I get the permissions of a file without parsing ls -l output?
  88. How can I avoid losing any history lines?

Stefan Durand

My name is Stefan, I'm the admin of LinuxScrew. I am a full-time Linux/Unix sysadmin, a hobby Python programmer, and a part-time blogger. I post useful guides, tips, and tutorials on common Linux and Programming issues. Feel free to reach out in the comment section.

Leave a Reply

Your email address will not be published. Required fields are marked *