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?

2 thoughts on “Bash shell FAQ”

  1. I’ve been gone for a while, but now I remember why I used to love this web site. Thank you, I will try and check back more often. How often do you update your site?

  2. Plantar Fasciitis Treatment

    It frequently is amazing to me how site owners such as yourself can find the time along with the commitment to keep on composing terrific blogposts. Your site isgreat and one of my ought to read weblogs. I just needed to say thanks.

Leave a Reply

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