From IT Mission Linux Tips, Hacks, Tutorials, Howtos - Itmission.org

Main: BASH

Bash Programming Cheat Sheet


Example Conditional Branching:


root is in ! ~/patch read -p "Enter 1 or 0: " ; if test "$1" = 0;then echo 1; else echo 0; fi
Enter 1 or 0: 1
0

root is in ! ~/patch read -p "Enter 1 or 0: " ; if test "$1" = 0;then echo 1; else echo 0; fi
Enter 1 or 0: 0
0
root is in ! ~/patch

Example 2 Conditional Branching
===========================

[notroot@puppet ~]$ if test "$USER" != 'root' ; then
> echo "you  are not logged in as root"
> fi
you  are not logged in as root

[notroot@puppet ~]$ if test "$USER" != 'root' ; then echo "you  are not logged in as root"; fi
you  are not logged in as root
[notroot@puppet ~]$

test - check file types and compare values

NAME
       test - check file types and compare values

SYNOPSIS
       test EXPRESSION
       test

       [ EXPRESSION ]
       [ ]
       [ OPTION

DESCRIPTION
       Exit with the status determined by EXPRESSION.

       --help display this help and exit

       --version
              output version information and exit

       An  omitted  EXPRESSION defaults to false.  
      , EXPRESSION is true or false and sets exit status.  It is one of:

       ( EXPRESSION )
              EXPRESSION is true

       ! EXPRESSION
              EXPRESSION is false

       EXPRESSION1 -a EXPRESSION2
              both EXPRESSION1 and EXPRESSION2 are true

       EXPRESSION1 -o EXPRESSION2
              either EXPRESSION1 or EXPRESSION2 is true

       -n STRING
              the length of STRING is nonzero

       STRING equivalent to -n STRING

       -z STRING
              the length of STRING is zero

       STRING1 = STRING2
              the strings are equal

       STRING1 != STRING2
              the strings are not equal

       INTEGER1 -eq INTEGER2
              INTEGER1 is equal to INTEGER2

       INTEGER1 -ge INTEGER2
              INTEGER1 is greater than or equal to INTEGER2

       INTEGER1 -gt INTEGER2
              INTEGER1 is greater than INTEGER2

       INTEGER1 -le INTEGER2
              INTEGER1 is less than or equal to INTEGER2

       INTEGER1 -lt INTEGER2
              INTEGER1 is less than INTEGER2

       INTEGER1 -ne INTEGER2
              INTEGER1 is not equal to INTEGER2

       FILE1 -ef FILE2
              FILE1 and FILE2 have the same device and inode numbers

       FILE1 -nt FILE2
               FILE1 is newer than FILE2

       FILE1 -ot FILE2
              FILE1 is older than FILE2

       -b FILE
              FILE exists and is block special

       -c FILE
              FILE exists and is character special

       -d FILE
              FILE exists and is a directory

       -e FILE
              FILE exists

       -f FILE
              FILE exists and is a regular file

       -g FILE
              FILE exists and is set-group-ID

       -G FILE
              FILE exists and is owned by the effective group ID

       -h FILE
              FILE exists and is a symbolic link (same as -L)

       -k FILE
              FILE exists and has its sticky bit set

       -L FILE
              FILE exists and is a symbolic link (same as -h)

       -O FILE
              FILE exists and is owned by the effective user ID

       -p FILE
              FILE exists and is a named pipe

       -r FILE
              FILE exists and read permission is granted

       -s FILE
              FILE exists and has a size greater than zero

       -S FILE
              FILE exists and is a socket

       -t FD  file descriptor FD is opened on a terminal

       -u FILE
              FILE exists and its set-user-ID bit is set

       -w FILE
              FILE exists and write permission is granted

       -x FILE
              FILE exists and execute (or search) permission is granted


Written By: ph34r - http://www.linux-sxs.org/programming/bashcheat.html

A quick cheat sheet for programmers who want to do shell scripting.

Learning about bash scripting.

Basics



All bash scripts must tell the o/s what to use as the interpreter. 

The first line of any script should be:

#!/bin/bash

You must make bash scripts executable.

chmod +x filename

Variables

Create a variable - just assign value. Variables are non-datatyped 
(a variable can hold strings, numbers, etc. with out being defined as such).

varname=value

Access a variable by putting $ on the front of the name

echo $varname

Values passed in from the command line as arguments are accessed as $# where #= the index
of the variable in the array of values being passed in. 

This array is base 1 not base 0. command var1 var2 var3 .... varX $1 contains whatever 
var1 was, $2 contains whatever var2 was, etc.

Built in variables:
==================

$1-$N	Stores the arguments (variables) that were passed to the shell program from the command line.

$?	Stores the exit value of the last command that was executed.

$0	Stores the first word of the entered command (the name of the shell program).

$*	Stores all the arguments that were entered on the command line ($1 $2 ...).

"$@"	Stores all the arguments that were entered on the command line, individually quoted ("$1" "$2" ...).

Quote Marks
===========

Regular double quotes ("like these") make the shell ignore whitespace 
and count it all as one argument being passed or string to use. 

Special characters inside are still noticed/obeyed.

Single quotes 'like this' make the interpreting shell ignore all special 
characters in whatever string is being passed.

The back single quote marks (`command`) perform a different function. 
They are used when you want to use the results of a command in another command. 

For example, if you wanted to set the value of the variable contents equal 
to the list of files in the current directory, you would type the 
following command: contents=`ls`, the results of the ls program are put 
in the variable contents.

Logic and comparisons
=====================

A command called test is used to evaluate conditional expressions, 
such as a if-then statement that checks the entrance/exit criteria for a loop.

test expression
Or
[ expression ]

Numeric Comparisons
====================
int1 -eq int2	Returns True if int1 is equal to int2.
int1 -ge int2	Returns True if int1 is greater than or equal to int2.
int1 -gt int2	Returns True if int1 is greater than int2.
int1 -le int2	Returns True if int1 is less than or equal to int2
int1 -lt int2	Returns True if int1 is less than int2
int1 -ne int2	Returns True if int1 is not equal to int2

String Comparisons
==================

str1 = str2	Returns True if str1 is identical to str2.
str1 != str2	Returns True if str1 is not identical to str2.
str	Returns True if str is not null.

-n str	Returns True if the length of str is greater than zero.
-z str	Returns True if the length of str is equal to zero. (zero is different than null)
File Comparisons

-d filename	Returns True if file, filename is a directory.
-f filename	Returns True if file, filename is an ordinary file.
-r filename	Returns True if file, filename can be read by the process.
-s filename	Returns True if file, filename has a nonzero length.
-w filename	Returns True if file, filename can be written by the process.
-x filename	Returns True if file, filename is executable.




Expression Comparisons
======================

!expression
Returns true if expression is not true

expr1 -a expr2
Returns True if expr1 and expr2 are true. ( && , and )

expr1 -o expr2
Returns True if expr1 or expr2 is true. ( ||, or )



Logic Con't.
============

If...then

if [ expression ]
then
commands
fi


If..then...else

if [ expression ]
then
commands
else
commands
fi


If..then...else If...else
=========================

if [ expression ]
then
commands
elif [ expression2 ]
then
commands
else
commands
fi

Case select
===========

case string1 in
str1)
commands;;
str2)
commands;;
*)
commands;;
esac

string1 is compared to str1 and str2. If one of these strings matches string1, 
the commands up until the double semicolon (; ;) are executed. 
If neither str1 nor str2 matches string1, the commands associated with the 
asterisk are executed. 

This is the default case condition because the asterisk matches all strings.

Iteration (Loops)
=================

for var1 in list
do
commands
done

This executes once for each item in the list. 
This list can be a variable that contains several words 
separated by spaces (such as output from ls or cat), or it 
can be a list of values that is typed directly into the statement. 
Each time through the loop, the variable var1 is assigned the current 
item in the list, until the last one is reached.

while [ expression ]
do
commands
done

until [ expression ]
do
commands
done

Functions
=========

Create a function:

fname(){
commands
}


Call it by using the following syntax: fname

Or, create a function that accepts arguments:

fname2 (arg1,arg2...argN){
commands
}

And call it with: fname2 arg1 arg2 ... argN


Retrieved from http://www.itmission.org/Main/BASH
Page last modified on October 14, 2014, at 01:31 AM