Skip to content

Instantly share code, notes, and snippets.

@spiralx
Created April 8, 2015 14:25
Show Gist options
  • Save spiralx/1742fd73e89d54c77894 to your computer and use it in GitHub Desktop.
Save spiralx/1742fd73e89d54c77894 to your computer and use it in GitHub Desktop.
Shell scripting cheat-sheets

BASH cheat-sheet

Redirects and pipes

# Send stdout to stderr
ll 1>&2

# Send stderr to stdout
ll 2>&1

# Send stdout to null
ll &> /dev/null

# Pipe ls output into grep
ll | grep "\.txt$"

Variables

VAR="Moo moo MOO"

echo $VAR
echo VAR is: $VAR

# Evaluate expression inline - $(expr)
echo /backup/apache2-$(date +%Y%m%d).tar.bz2

# Local vars
function foo {
  local VAR="Y HELO THAR"
  echo $VAR                 # Y HELO THAR
}
foo
echo $VAR                   # Moo moo MOO

Strings

PWD=`pwd`
FN="/etc/apache2/httpd.conf"

# String length
echo ${#PWD}

# Upper/lower case
echo "${PWD^^}"
echo "${PWD,,}"

# Replace first/all matches
echo "${PWD/dev/dev.old}"
echo "${PWD//dev/dev.old}"
echo "${PWD//\//\\}"

# Remove all matches
echo "${PWD//dev}"

# Remove shortest/longest suffix
echo "${PWD%/*}"          # dirname
echo "${PWD%%/*}"

# Remove shortest/longest prefix
echo "${PWD#*/}"
echo "${PWD##*/}"         # basename

# Change extension
echo ${FN%.conf}.old.conf

# Slices
echo ${FN:0:5}            # /etc/
echo ${FN:5}              # apache2/httpd.conf
echo ${FN: -5}            # .conf
echo ${FN: -5:2}          # .c

Numbers

NUM=31
DEC=123.4567

# Arithmatic
let TOT=NUM+15            # Ints only, no spaces
let "TOT = NUM + 15"

let NUM+=15
let NUM++

TOT=`expr $NUM + 50`
TOT=`expr $NUM \* 50`

TOT=$(( NUM - 20 ))
TOT=$(( NUM * 50 ))

# Integer/fraction parts
echo ${DEC%.*}
echo ${DEC#*.}

Control

WHO=`whoami`

# Conditionals
if [ "$WHO" = "root" ]; then
  echo You are root!
else if [ "$WHO" = "james" ]
  echo You are me :)
else
  echo Current user: $WHO
fi

# Looping
for i in $(ls); do
  echo item: $i
done

for i in $(ls); do echo item: $i; done

for i in `seq 1 10`; do
  echo $i
done

for i in `seq 1 10`; do echo $i; done

IDX=0
while [ $IDX -lt 10 ]; do
  echo $IDX
  let IDX++
done

IDX=0; while [ $IDX -lt 10 ]; do echo $IDX; let IDX++; done

IDX=20
until [ $IDX -lt 10 ]; do
  echo $IDX
  let IDX--
done

IDX=20; until [ $IDX -lt 10 ]; do echo $IDX; let IDX--; done

Functions

function hello {
  echo Hello!
}
hello

# Parameters
function addone {
  echo $(($1 + 1))
}
addone 8      # 9

function addtwo {
  let V=$(addone $1)
  echo $(addone $V)
}
addtwo 8      # 10

function trim { local S=$1; echo ${S:1}; }
trim "|foo"    # foo

Examples

PACKAGES=(clean notify rm)

# One command per item
for pkg in ${PACKAGES[@]}; do echo npm rm --save-dev gulp-$pkg; done
# npm rm --save-dev gulp-clean
# npm rm --save-dev gulp-notify
# npm rm --save-dev gulp-rm

# One argument per item
echo npm rm --save-dev $(for pkg in ${PACKAGES[@]}; do echo gulp-$pkg; done)
# npm rm --save-dev gulp-clean gulp-notify gulp-rm
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment