Differences

This shows you the differences between two versions of the page.


bash [2020/09/09 05:18] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== #!/bin/bash ======
  
 +  * [[csh]]
 +  * [[ksh]]
 +  * [[sh]]
 +  * [[tcsh]]
 +  * [[zsh]]
 +
 +  * [[bash Built-In Commands]]
 +  * [[bash completion]]
 +  * [[bsfl]]
 +  * [[getopts]]
 +  * [[iterm]]
 +
 +  * [[ftp://ftp.gnu.org/gnu/bash/]]
 +  * [[ftp://ftp.beandog.org/rsyncd/dotfiles/.bashrc.extra]] - My cross-platform ''.bashrc.extra'' :D
 +  * [[http://www.aboutlinux.info/2005/10/10-seconds-guide-to-bash-shell.html|Bash Shell Scripting - 10 Seconds Guide]]
 +  * [[http://tille.garrels.be/training/bash/ch07.html|Conditional statements]]
 +  * [[http://hacktux.com/bash/colors|bash colors]]
 +  * [[http://wiki.bash-hackers.org/doku.php|Bash Hackers wiki]]
 +  * [[http://www.commandlinefu.com/commands/browse|commandlinefu.com]]
 +  * [[http://www.mcsr.olemiss.edu/unixhelp/shell/oview1.1.html|Summary of shell facilities]]
 +  * [[http://ss64.com/bash/|An A-Z Index of the Bash command line for Linux]]
 +  * [[http://www.cheatography.com/oguzkonya/cheat-sheets/bash/|bash Cheat Sheet]] - some pretty advanced stuff
 +  * [[http://www.cyberciti.biz/faq/linux-bash-delete-all-files-in-directory-except-few/|Delete All Files In Directory Except Few]]
 +  * [[https://shellshocker.net/|Shellshocker]]
 +  * [[http://redsymbol.net/articles/unofficial-bash-strict-mode/|Use the Unofficial Bash Strict Mode (Unless You Looove Debugging)]] - strict mode to help find bugs
 +  * [[http://ascii-table.com/ansi-escape-sequences-vt-100.php|ANSI Escape Sequences]]
 +  * [[https://mywiki.wooledge.org/BashPitfalls|Bash Pitfalls]]
 +
 +== String Operators ==
 + 
 +  * **-a** and
 +  * **-o** or
 +  * **=** or **==** equal to
 +  * **-n** string is not null
 +  * **-z** string is null, that is, has zero length
 +
 +== Numeric Operators ==
 +
 +  * **-eq** number equals
 +  * **-ne** number does not equal
 +  * **-gt** greater than
 +  * **-ge** greater than or equal to
 +  * **-lt** less than
 +  * **-le** less than or equal to
 +
 +== File Operators ==
 +
 +  * **-e** file exists (returns false in Bourne shell if file is a symlink)
 +  * **-f** file is not a directory or device file
 +  * **-d** file exists and is a directory
 +  * **-h** file exists and is a symlink (also **-L**)
 +  * **-s** file exists and has a size greater than zero
 +  * **-w** file exists and is writeable
 +  * **-x** file exists and is executable
 +  * **-r** file exists and is readable
 +  * **-b** file is a block device
 +  * **-c** file is a character device
 +  * **-p** file is a pipe
 +  * **-S** file is a socket
 +  * **-O** you are owner of file
 +  * **-G** you are group owner of file
 +
 +== Regular Expressions ==
 +
 +Use ''=~'' followed by a regular expression pattern.  **Do not** enclose the pattern in quotes if using in a ''test'' block.
 +
 +Check if a variable is a positive integer:
 +
 +<code>
 +[[ $1 =~ ^[0-9]+$ ]]
 +</code>
 +
 +== Functions ==
 +
 +Functions are created and called the same as any shell script: use command line arguments as parameters to pass, and echo any output.
 +
 +<code bash>
 +function parse_input() {
 +   INPUT=$1
 +   echo "You passed ${1} as an argument"
 +}
 +</code>
 +
 +== Read each line ==
 +
 +<code bash>
 +cat filename | while read line; do
 +  echo "Your line says ${line}"
 +done
 +</code>
 +
 +== String subset ==
 +
 +Syntax: ${variable:<starting integer>[:<num characters>]}
 +
 +<code bash>
 +string="O hai"
 +echo ${string:2} # returns hai
 +</code>
 +
 +== Strings ==
 +
 +** Get string length **
 +
 +<code bash>
 +${#string}
 +expr length $string
 +</code>
 +
 +** Find the index of the first occurrence of a letter in a string **
 +
 +Returns 0 on not found.
 +
 +<code bash>
 +expr index abcdefg d
 +</code>
 +
 +** Strings as commands **
 +
 +You need to use ''eval'' to **reparse** a command through bash.
 +
 +See [[http://fvue.nl/wiki/Bash:_Why_use_eval_with_variable_expansion|here]]
 +
 +<code bash>
 +#!/bin/bash
 +cmd="date --date=\"1 days ago\""
 +$cmd         # Doesn't work
 +eval $cmd    # Works
 +</code>
 +
 +** Simple sed replacement **
 +
 +<code bash>
 +echo testing testing2 | sed -e 's/ /\|/' # returns testing|testing2
 +</code>
 +
 +** Simple cut with a delimiter, grabbing a field **
 +
 +<code bash>
 +eix --only-names -Ie bash | cut -d "/" -f 2
 +</code>
 +
 +== Variables ==
 +
 +  * [[http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_02.html]]
 +
 +  * **$#** - number of bash arguments
 +  * **$*** - display all variables passed
 +  * **$$** - pid of shell, or script being run
 +  * **$0** - name of the script
 +  * **$!** - pid of last job run in background
 +  * **$_** - last command run, without the arguments
 +
 +== Displaying variables ==
 +
 +When setting a variable using the backtick operator, use double quotes around the variable to retain newlines.
 +
 +<code bash>
 +files=`ls`
 +echo "$files"
 +</code>
 +
 +== Console settings ==
 +
 +Get the size of the available cols, lines.  Useful when writing shell applications that display output that needs to be paged:
 +
 +<code>
 +tput cols
 +tput lines
 +</code>
 +
 +== Cool bash stuff ==
 +
 +  * **mktemp** (coreutils) make a temporary file in /tmp
 +
 +== Get exit status from piped outputs ==
 +
 +"Wonder piping!" --Shaine
 +
 +<code bash>
 +$ true | false | true
 +$ echo ${PIPESTATUS[*]}
 +</code>
 +
 +== Special variables ==
 +
 +  * ''$#'' Number of arguments on commandline.
 +  * ''$?'' Exit status of last command.
 +  * ''$$'' Process id of current program.
 +  * ''$!'' Process id of last backgroundjob or background function.
 +  * ''$0'' Program name including the path if started from another directory.
 +  * ''$1..n'' Commandline arguments, each at a time.
 +  * ''$*'' All commandline arguments in one string.
 +
 +== Colors ==
 +
 +^ Color ^ Normal ^ Bold ^
 +| Gray | 00;38 | 01;30 |
 +| Black | 00;30 | |
 +| Red |00;31 | 01;31 |
 +| Green | 00;32 | 01;32 |
 +| Purple 1 | 00;33 | 01;33 |
 +| Blue | 00;34 | 01;34 |
 +| Purple 2 | 00;35 | 01;35 |
 +| Cyan | 00;36 | 01;36 |
 +| White | 00;37 | 01;38 |
 +| Bright Blue | | 01;37 |
 +| Yellow | 02;33 | |
 +| Dark Gray | | |
 +
 +== Trapping signals ==
 +
 +You can use ''trap'' to capture a signal, such as Ctl-C to kill a command, and then map it to an internal function inside the bash script.
 +
 +This is useful in scenarios where a shell script calls other scripts, and cancelling them would only cancel that one executed script instead of the main one.
 +
 +<code>
 +control_c() {
 +        exit 1
 +}
 +
 +trap control_c INT
 +</code>
 +
 +== Command Line Control ==
 +
 +  * Delete: Ctrl W
 +  * Clear Line: Ctrl U
 +  * Start of Line: Ctrl A
 +  * End of Line: Ctrl E
 +
 +== Check Input ==
 +
 +Check to see if input is an integer:
 +
 +<code>
 +if [[ $1 == ?(-)+([0-9]) ]]; then echo "$1 is an integer"; fi
 +</code>

Navigation
QR Code
QR Code bash (generated for current page)