The Bash Shell
- [[Unix]], in general
- [[Shell Scripting]] in general
- [[Unix File Processing]]
- Unix Tools
- The Art of the Command Line
- Tips
- The Google bashStyle Guide
- Eight Obscure Bash Options You Might Want to Know About
Standard shebang header
Update Bash profile
echo 'export PATH="/some/path:$PATH"' >> ~/.bash_profile
Run in same directory
#!/usr/bin/env bash
#
cd $(dirname "$0")
But this won’t work if there are spaces in the directory spec.
Extract filename etc
filename=$(basename "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"
Change file extension
Alias’s
# Q: Why isn't alias working ?
# A: Because  don't work in non interactive mode.
#
#
shopt -s expand_aliases
alias chrome="/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome"
alias chrome-canary="/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary"
alias chromium="/Applications/Chromium.app/Contents/MacOS/Chromium"
Adding help
#!/bin/bash
#
# captureScreenshots
#
usage() {
    cat <<EOM
    Usage:
    $(basename $0)  URL filename-without-extension
EOM
    exit 0
}
if [[ ( $@ == "--help") ||  $@ == "-h" ||  $@ == "-?" ]];
then
  usage;
  exit 0
fi
Defaulting parameters
url=${1-https://ontaap.herokuapp.com/demo/index.html}
filename=${2-screenshot}
Fetch and run a gist
#!/usr/bin/env bash
function curlsource() {
        f=$(mktemp -t curlsource)
        curl -o "$f" -s -L "$1"
        source "$f"
        rm -f "$f"
    }
    
curlsource https://raw.githubusercontent.com/DEADBEEF/raw
Yes / No input
#!/usr/bin/env bash
read -p "yes or no: " RESPONSE
case "$RESPONSE" in
  yes|y|Yes|Y)
    echo "blah is yes"
    ;;
  no|n|No|N)
    echo "blah is no"
    ;;
  *)
    echo "You need to say yes or no, start over!"
    exit 1
    ;;
esac
Options
Gleaned from here
set -o   # Show current settings
set -o xtrace # Debug
set -o errexit # Exit on error
set -o autocd # Auto cd (Works with [TAB] completion)
set -o errunset # Variabe used before set
File name extraction
filename=$(basename "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"
- See [[zsh]].