Some useful terminal commands
| Command/Key | Description |
|---|---|
| grep -i | Case insensitive search |
| grep -r | Recursive search |
| grep -v | Inverted search |
| grep -C <num> | print <num> lines before and after the match line |
| cmd 1>&2 | stdout to same place as stderr |
| cmd 2>&1 | stderr to same place as stdout |
| !! | Repeat last command |
| !abc | Run last command starting with abc |
| head -n1 /etc/issue | Show distribution |
| CTRL-a | Go to the start of line |
| CTRL-e | Go the the end of line |
| CTRL-u | Cut from start of line |
| CTRL-k | Cut to end of line |
| Ctrl + w | delete from cursor to start of word (i.e. delete backwards one word) |
| Ctrl + y | paste word or text that was cut using one of the deletion shortcuts (such as the one above) after the cursor |
| Ctrl + xx | move between start of command line and current cursor position (and back again) |
| Ctrl + r | search the history backwards |
| Ctrl + g | escape from history searching mode |
| Ctrl + p | previous command in history (i.e. walk back through the command history) |
| Ctrl + n | next command in history (i.e. walk forward through the command history) |
| CTRL-d | Log out from a shell (similar to exit). EOF (end-of-file). This also terminates input form stdin. |
| CTRL-l | clear the terminal screen |
| CTRL-z | Sleep program |
| bg | Run the sleep program at background |
| fg | Bring the program from background to foreground |
| ! ! | run last command |
| !blah | run the most recent command that starts with ‘blah’ (e.g. !ls) |
| !blah:p | print out the command that !blah would run (also adds it as the latest command in the command history) |
| !$ | the last word of the previous command (same as Alt + .) |
| !$:p | print out the word that !$ would substitute |
| !* | the previous command except for the last word (e.g. if you type ‘find some_file.txt /‘, then !* would give you ‘find some_file.txt‘) |
| !*:p | print out what !* would substitute |
Remove bed file name: rm – -badfilename
IF/ELIF/ELSE/FI
if [ "$animal" == "penguin" ]; then
echo "Hmmmmmm fish... Tux happy!"
elif [ "$animal" == "dolphin" ]; then
echo "Pweetpeettreetppeterdepweet!"
else
echo "*prrrrrrrt*"
fi
Check comand return value
/pagh/script.sh
case $? in
1)
echo "return 1"
;;
2)
echo "return 2"
;;
*)
echo "return $?"
;;
esac
Integer comparison
| Operator | Description | Example & comments |
|---|---|---|
| -eq | is equal to | if [ “$a” -eq “$b” ] |
| -ne | is not equal to | if [ “$a” -ne “$b” ] |
| -gt | is greater than | if [ “$a” -gt “$b” ] |
| -ge | is greater than or equal to | if [ “$a” -ge “$b” ] |
| -lt | is less than | if [ “$a” -lt “$b” ] |
| -le | is less than or equal to | if [ “$a” -le “$b” ] |
| < | is less than (within double parentheses) | ((“$a” < “$b”)) |
| <= | is less than or equal to (within double parentheses) | ((“$a” <= “$b”)) |
| > | is greater than (within double parentheses | ((“$a” > “$b”)) |
| >= | is greater than or equal to (within double parentheses) | ((“$a” >= “$b”)) |
String comparison
| Operator | Description | Example & comments |
|---|---|---|
| = | is equal to | if [ “$a” = “$b” ] Note the whitespace framing the =. if [ “$a”=”$b” ] is NOT equivalent to the above. |
| == | is equal to | if [ “$a” == “$b” ] There is a synonym for =. The == comparison operator behaves differently within a double-brackets test than with in single brackets. [[ $a == z* ]] # True if $a starts with an “z” (pattern matching) [[ $a == “z*” ]] # True if $a is equal to z* (literal matching) [ $a == z* ] # File globbing and word splitting take place. [ “$a” == “$z” ] # True if $a is equal to z* (literal matching) |
| != | is not equal to | if[ “$a” != “$b” ] This operator uses pattern matching with in a [[ … ]] construct. |
| < | is less than, in ASCII alphabetical order | if [[ “$a” < “$b” ]] if [ “$a” < “$b” ] Note that the “<” needs to be escaped within a [ … ] construct. |
| > | is great than, in ASCII alphabetical order | if [[ “$a” > “$b” ]] if [ “$a” > “$b” ] Note that the “>” needs to be escaped within a [ … ] construct. |
| -z | string is null, that is, has zero length | String=’’ # Zero-length (“null”) string variable. if [ -z “$String” ] |
| -n | strint is not null |
Special Shell Variable
| Variable | Meaning |
|---|---|
| $0 | Filename of script |
| $1 | Positional parameter #1 |
| $2 - $9 | Positional parameters #2 - #9 |
| ${10} | Positional parameter #10 |
| $# | Number of positional parameters |
| ”$*” | All the positional parameters (as a single word) * |
| ”$@” | All the positional parameters (as separate strings) |
| ${#*} | Number of positional parameters |
| ${#@} | Number of positional parameters |
| $? | Return value |
| $$ | Process ID (PID) of script |
| $- | Flags passed to script (using set) |
| $_ | Last argument of previous command |
| $! | Process ID (PID) of last job run in background |
Files test operators
| Operator | Tests Whether | —– | Operator | Tests Whether |
|---|---|---|---|---|
| -e | File exists | -s | File is not zero size | |
| -f | File is a regular file | |||
| -d | File is a directory | -r | File has read permission | |
| -h | File is a symbolic link | -w | File has write permission | |
| -L | File is a symbolic link | -x | File has execute permission | |
| -b | File is a block device | |||
| -c | File is a character device | -g | sgid flag set | |
| -p | File is a pipe | -u | suid flag set | |
| -S | File is a socket | -k | “sticky bit” set | |
| -t | File is associated with a terminal | |||
| -N | File modified since it was last read | F1 -nt F2 | File F1 is newer than F2 | |
| -O | You own the file | F1 -ot F2 | File F1 is older than F2 | |
| -G | Group id of file same as yours | F1 -ef F2 | Files F1 and F2 are hard links to the same file | |
| ! | NOT (inverts sense of above tests) |
Reference: http://tldp.org/LDP/abs/html/