Explore Bash Notes on easenotes for valuable insights into Bash commands and techniques for both professionals and beginners.
Discover Bash Notes on easenotes for insightful guidance on Bash commands and techniques suitable for both beginners and professionals. To excel in Bash scripting, remember these essential tips. Firstly, ensure your scripts are well-structured and annotated for clarity, aiding in both comprehension and collaboration. Secondly, utilize variables to enhance script efficiency and maintenance. Lastly, include error handling in your scripts to preempt and tackle unexpected issues. By integrating these expert Bash notes into your scripting routine, you can enhance your abilities and produce more resilient scripts.
Chapter 1: Getting Started with Bash
Section 1.1: Hello World
Section 1.2: Hello World Using Variables
Section 1.3: Hello World with User Input
Section 1.4: Importance of Quoting in Strings
Section 1.5: Viewing information for Bash built-ins
Section 1.6: Hello World in "Debug" mode
Section 1.7: Handling Named Arguments
Chapter 2: Script shebang
Section 2.1: Env shebang
Section 2.2: Direct shebang
Section 2.3: Other shebangs
Chapter 3: Navigating directories
Section 3.1: Absolute vs relative directories
Section 3.2: Change to the last directory
Section 3.3: Change to the home directory
Section 3.4: Change to the Directory of the Script
Chapter 4: Listing Files
Section 4.1: List Files in a Long Listing Format
Section 4.2: List the Ten Most Recently Modified Files
Section 4.3: List All Files Including Dotfiles
Section 4.4: List Files Without Using ls
Section 4.5: List Files
Section 4.6: List Files in a Tree-Like Format
Section 4.7: List Files Sorted by Size
Chapter 5: Using cat
Section 5.1: Concatenate files
Section 5.2: Printing the Contents of a File
Section 5.3: Write to a file
Section 5.4: Show non printable characters
Section 5.5: Read from standard input
Section 5.6: Display line numbers with output
Section 5.7: Concatenate gzipped files
Chapter 6: Grep
Section 6.1: How to search a file for a pattern
Chapter 7: Aliasing
Section 7.1: Bypass an alias
Section 7.2: Create an Alias
Section 7.3: Remove an alias
Section 7.4: The BASH_ALIASES is an internal bash assoc array
Section 7.5: Expand alias
Section 7.6: List all Aliases
Chapter 8: Jobs and Processes
Section 8.1: Job handling
Section 8.2: Check which process running on specific port
Section 8.3: Disowning background job
Section 8.4: List Current Jobs
Section 8.5: Finding information about a running process
Section 8.6: List all processes
Chapter 9: Redirection
Section 9.1: Redirecting standard output
Section 9.2: Append vs Truncate
Section 9.3: Redirecting both STDOUT and STDERR
Section 9.4: Using named pipes
Section 9.5: Redirection to network addresses
Section 9.6: Print error messages to stderr
Section 9.7: Redirecting multiple commands to the same file
Section 9.8: Redirecting STDIN
Section 9.9: Redirecting STDERR
Section 9.10: STDIN, STDOUT and STDERR explained
Chapter 10: Control Structures
Section 10.1: Conditional execution of command lists
Section 10.2: If statement
Section 10.3: Looping over an array
Section 10.4: Using For Loop to List Iterate Over Numbers
Section 10.5: continue and break
Section 10.6: Loop break
Section 10.7: While Loop
Section 10.8: For Loop with C-style syntax
Section 10.9: Until Loop
Section 10.10: Switch statement with case
Section 10.11: For Loop without a list-of-words parameter
Chapter 11: true, false and : commands
Section 11.1: Infinite Loop
Section 11.2: Function Return
Section 11.3: Code that will always/never be executed
Chapter 12: Arrays
Section 12.1: Array Assignments
Section 12.2: Accessing Array Elements
Section 12.3: Array Modification
Section 12.4: Array Iteration
Section 12.5: Array Length
Section 12.6: Associative Arrays
Section 12.7: Looping through an array
Section 12.8: Destroy, Delete, or Unset an Array
Section 12.9: Array from string
Section 12.10: List of initialized indexes
Section 12.11: Reading an entire file into an array
Section 12.12: Array insert function
Chapter 13: Associative arrays
Section 13.1: Examining assoc arrays
Chapter 14: Functions
Section 14.1: Functions with arguments
Section 14.2: Simple Function
Section 14.3: Handling flags and optional parameters
Section 14.4: Print the function definition
Section 14.5: A function that accepts named parameters
Section 14.6: Return value from a function
Section 14.7: The exit code of a function is the exit code of its last command
Chapter 15: Bash Parameter Expansion
Section 15.1: Modifying the case of alphabetic characters
Section 15.2: Length of parameter
Section 15.3: Replace pattern in string
Section 15.4: Substrings and subarrays
Section 15.5: Delete a pattern from the beginning of a string
Section 15.6: Parameter indirection
Section 15.7: Parameter expansion and filenames
Section 15.8: Default value substitution
Section 15.9: Delete a pattern from the end of a string
Section 15.10: Munging during expansion
Section 15.11: Error if variable is empty or unset
Chapter 16: Copying (cp)
Section 16.1: Copy a single file
Section 16.2: Copy folders
Chapter 17: Find
Section 17.1: Searching for a file by name or extension
Section 17.2: Executing commands against a found file
Section 17.3: Finding file by access / modification time
Section 17.4: Finding files according to size
Section 17.5: Filter the path
Section 17.6: Finding files by type
Section 17.7: Finding files by specific extension
Chapter 18: Using sort
Section 18.1: Sort command output
Section 18.2: Make output unique
Section 18.3: Numeric sort
Section 18.4: Sort by keys
Chapter 19: Sourcing
Section 19.1: Sourcing a file
Section 19.2: Sourcing a virtual environment
Chapter 20: Here documents and here strings
Section 20.1: Execute command with here document
Section 20.2: Indenting here documents
Section 20.3: Create a file
Section 20.4: Here strings
Section 20.5: Run several commands with sudo
Section 20.6: Limit Strings
Chapter 21: Quoting
Section 21.1: Double quotes for variable and command substitution
Section 21.2: Difference between double quote and single quote
Section 21.3: Newlines and control characters
Section 21.4: Quoting literal text
Chapter 22: Conditional Expressions
Section 22.1: File type tests
Section 22.2: String comparison and matching
Section 22.3: Test on exit status of a command
Section 22.4: One liner test
Section 22.5: File comparison
Section 22.6: File access tests
Section 22.7: Numerical comparisons
Chapter 23: Scripting with Parameters
Section 23.1: Multiple Parameter Parsing
Section 23.2: Argument parsing using a for loop
Section 23.3: Wrapper script
Section 23.4: Accessing Parameters
Section 23.5: Split string into an array in Bash
Chapter 24: Bash history substitutions
Section 24.1: Quick Reference
Section 24.2: Repeat previous command with sudo
Section 24.3: Search in the command history by pattern
Section 24.4: Switch to newly created directory with !#:N
Section 24.5: Using !$
Section 24.6: Repeat the previous command with a substitution
Chapter 25: Math
Section 25.1: Math using dc
Section 25.2: Math using bash capabilities
Section 25.3: Math using bc
Section 25.4: Math using expr
Chapter 26: Bash Arithmetic
Section 26.1: Simple arithmetic with (( ))
Section 26.2: Arithmetic command
Section 26.3: Simple arithmetic with expr
Chapter 27: Scoping
Section 27.1: Dynamic scoping in action
Chapter 28: Process substitution
Section 28.1: Compare two files from the web
Section 28.2: Feed a while loop with the output of a command
Section 28.3: Concatenating files
Section 28.4: Stream a file through multiple programs at once
Section 28.5: With paste command
Section 28.6: To avoid usage of a sub-shell
Chapter 29: Programmable completion
Section 29.1: Simple completion using function
Section 29.2: Simple completion for options and filenames
Chapter 30: Customizing PS1
Section 30.1: Colorize and customize terminal prompt
Section 30.2: Show git branch name in terminal prompt
Section 30.3: Show time in terminal prompt
Section 30.4: Show a git branch using PROMPT_COMMAND
Section 30.5: Change PS1 prompt
Section 30.6: Show previous command return status and time
Chapter 31: Brace Expansion
Section 31.1: Modifying filename extension
Section 31.2: Create directories to group files by month and year
Section 31.3: Create a backup of dotfiles
Section 31.4: Use increments
Section 31.5: Using brace expansion to create lists
Section 31.6: Make Multiple Directories with Sub-Directories
Chapter 32: getopts : smart positional-parameter parsing
Section 32.1: pingnmap
Chapter 33: Debugging
Section 33.1: Checking the syntax of a script with "-n"
Section 33.2: Debugging using bashdb
Section 33.3: Debugging a bash script with "-x"
Chapter 34: Pattern matching and regular expressions
Section 34.1: Get captured groups from a regex match against a string
Section 34.2: Behaviour when a glob does not match anything
Section 34.3: Check if a string matches a regular expression
Section 34.4: Regex matching
Section 34.5: The * glob
Section 34.6: The ** glob
Section 34.7: The ? glob
Section 34.8: The [ ] glob
Section 34.9: Matching hidden files
Section 34.10: Case insensitive matching
Section 34.11: Extended globbing
Chapter 35: Change shell
Section 35.1: Find the current shell
Section 35.2: List available shells
Section 35.3: Change the shell
Chapter 36: Internal variables
Section 36.1: Bash internal variables at a glance
Section 36.2: $@
Section 36.3: $#
Section 36.4: $HISTSIZE
Section 36.5: $FUNCNAME
Section 36.6: $HOME
Section 36.7: $IFS
Section 36.8: $OLDPWD
Section 36.9: $PWD
Section 36.10: $1 $2 $3 etc..
Section 36.11: $*
Section 36.12: $!
Section 36.13: $?
Section 36.14: $$
Section 36.15: $RANDOM
Section 36.16: $BASHPID
Section 36.17: $BASH_ENV
Section 36.18: $BASH_VERSINFO
Section 36.19: $BASH_VERSION
Section 36.20: $EDITOR
Section 36.21: $HOSTNAME
Section 36.22: $HOSTTYPE
Section 36.23: $MACHTYPE
Section 36.24: $OSTYPE
Section 36.25: $PATH
Section 36.26: $PPID
Section 36.27: $SECONDS
Section 36.28: $SHELLOPTS
Section 36.29: $_
Section 36.30: $GROUPS
Section 36.31: $LINENO
Section 36.32: $SHLVL
Section 36.33: $UID
Chapter 37: Job Control
Section 37.1: List background processes
Section 37.2: Bring a background process to the foreground
Section 37.3: Restart stopped background process
Section 37.4: Run command in background
Section 37.5: Stop a foreground process
Chapter 38: Case statement
Section 38.1: Simple case statement
Section 38.2: Case statement with fall through
Section 38.3: Fall through only if subsequent pattern(s) match
Chapter 39: Read a file (data stream, variable) line-by-line (and/or field-by-field)?
Section 39.1: Looping through a file line by line
Section 39.2: Looping through the output of a command field by field
Section 39.3: Read lines of a file into an array
Section 39.4: Read lines of a string into an array
Section 39.5: Looping through a string line by line
Section 39.6: Looping through the output of a command line by line
Section 39.7: Read a file field by field
Section 39.8: Read a string field by field
Section 39.9: Read fields of a file into an array
Section 39.10: Read fields of a string into an array
Section 39.11: Reads file (/etc/passwd) line by line and field by field
Chapter 40: File execution sequence
Section 40.1: .profile vs .bash_profile (and .bash_login)
Chapter 41: Splitting Files
Section 41.1: Split a file
Chapter 42: File Transfer using scp
Section 42.1: scp transferring file
Section 42.2: scp transferring multiple files
Section 42.3: Downloading file using scp
Chapter 43: Pipelines
Section 43.1: Using |&
Section 43.2: Show all processes paginated
Section 43.3: Modify continuous output of a command
Chapter 44: Managing PATH environment variable
Section 44.1: Add a path to the PATH environment variable
Section 44.2: Remove a path from the PATH environment variable
Chapter 45: Word splitting
Section 45.1: What, when and Why?
Section 45.2: Bad effects of word splitting
Section 45.3: Usefulness of word splitting
Section 45.4: Splitting by separator changes
Section 45.5: Splitting with IFS
Section 45.6: IFS & word splitting
Chapter 46: Avoiding date using printf
Section 46.1: Get the current date
Section 46.2: Set variable to current time
Chapter 47: Using "trap" to react to signals and system events
Section 47.1: Introduction: clean up temporary files
Section 47.2: Catching SIGINT or Ctl+C
Section 47.3: Accumulate a list of trap work to run at exit
Section 47.4: Killing Child Processes on Exit
Section 47.5: react on change of terminals window size
Chapter 48: Chain of commands and operations
Section 48.1: Counting a text pattern occurrence
Section 48.2: transfer root cmd output to user file
Section 48.3: logical chaining of commands with && and ||
Section 48.4: serial chaining of commands with semicolon
Section 48.5: chaining commands with |
Chapter 49: Type of Shells
Section 49.1: Start an interactive shell
Section 49.2: Detect type of shell
Section 49.3: Introduction to dot files
Chapter 50: Color script output (cross-platform)
Section 50.1: color-output.sh
Chapter 51: Co-processes
Section 51.1: Hello World
Chapter 52: Typing variables
Section 52.1: declare weakly typed variables
Chapter 53: Jobs at specific times
Section 53.1: Execute job once at specific time
Section 53.2: Doing jobs at specified times repeatedly using systemd.timer
Chapter 54: Handling the system prompt
Section 54.1: Using the PROMPT_COMMAND environment variable
Section 54.2: Using PS2
Section 54.3: Using PS3
Section 54.4: Using PS4
Section 54.5: Using PS1
Chapter 55: The cut command
Section 55.1: Only one delimiter character
Section 55.2: Repeated delimiters are interpreted as empty fields
Section 55.3: No quoting
Section 55.4: Extracting, not manipulating
Chapter 56: Bash on Windows 10
Section 56.1: Readme
Chapter 57: Cut Command
Section 57.1: Show the first column of a file
Section 57.2: Show columns x to y of a file
Chapter 58: Global and local variables
Section 58.1: Global variables
Section 58.2: Local variables
Section 58.3: Mixing the two together
Chapter 59: CGI Scripts
Section 59.1: Request Method: GET
Section 59.2: Request Method: POST /w JSON
Chapter 60: Select keyword
Section 60.1: Select keyword can be used for getting input argument in a menu format
Chapter 61: When to use eval
Section 61.1: Using Eval
Section 61.2: Using Eval with Getopt
Chapter 62: Networking With Bash
Section 62.1: Networking commands
Chapter 63: Parallel
Section 63.1: Parallelize repetitive tasks on a list of files
Section 63.2: Parallelize STDIN
Chapter 64: Decoding URL
Section 64.1: Simple example
Section 64.2: Using printf to decode a string
Chapter 65: Design Patterns
Section 65.1: The Publish/Subscribe (Pub/Sub) Pattern
Chapter 66: Pitfalls
Section 66.1: Whitespace When Assigning Variables
Section 66.2: Failed commands do not stop script execution
Section 66.3: Missing The Last Line in a File