Arithmetic Operators | |
Operator | Description |
-eq | True if two integers are equal |
-ne | True if two integers are not equal |
-lt | True if operand1 is less than operand2 |
-le | True if operand1 is less than or equal to operand2 |
-gt | True if operand1 is greater than operand2 |
-ge | True if operand1 is greater than or equal to operand2 |
String Operators | |
String Operator | Description |
-z string | True if the string is empty |
-n string | True if the string is not empty |
string1 = string2 | True if the strings are equal |
string1 != string2 | True if the strings are not equa |
string1 < string2 | True if string1 sorts before string2 |
string1 > string2 | True if string1 sorts after string2 |
Files Operators | |
File Operator | Description |
-a | True if file exists |
-b | True if file is a block device file |
-c | True if file is a character device file |
-d | True if file is a directory |
-e | True if file exists |
-f | True if file exists and is a regular file |
-g | True if file has set-group-id permission set |
-h | True if file is a symbolic link |
-L | True if file is a symbolic link |
-k | True if file’s sticky bit is set |
-p | True if file is a named pipe |
-r | True if the file is readable (by current user) |
-s | True if file exists and is not empty |
-S | True if file is socket |
-u | True if file is set-user-id |
-w | True if file is writable (by current user) |
-x | True if file is executable |
-O | True if file is effectively owned by current user |
-G | True if file is effectively owned by current user’s group |
-N | True if file has been modified since it was last read |
file1 -nt file2 | True if operand1 is greater than or equal to operand2 |
file1 -ot file2 | True if operand1 is greater than or equal to operand2 |
file1 -ef file2 | True if file1 is a hard link to file2 |
Common Character Matching Patterns | |
Parttern | Description |
a|b | Matches either an a or a b |
* | Matches any string of characters, often used for a catchall |
[abc] | Matches any character a, b, or c |
[a-c] | Matches any character a, b, or c |
[0-9] | Matches any character 0 through 9 |
" | Matches the string enclosed in the quotes |
Special Shell Variables | |
Name | Description |
$1 - $n | Positional parameters that hold values for parameters passed to the script. |
$? | The exit status of the last command. Contains a 0 for successfully executed commands. Contains a nonzero value for commands that failed. This nonzero value depends on what the command actually returned. |
$0 | Within a shell script, contains the name of the shell script being executed. |
$# | The number of positional parameters passed to a script. |
$$ | The process number of the shell. Can be used to generate unique file names. |
$! | The process number of the most recently executed background process. |
$* | Contains all the positional parameters passed to the script. |
Testing a Condition
[ operand1 operator operand2 ]
Control Structures
if/then/else statement
case statement
for loop
Syntax | Examples |
if condition ; then commands else commands if if condition ; then commands elsif condition commands elsif condition commands if | #!/bin/bash thresh=1048576 totMem=$(grep MemTotal /proc/meminfo | awk '{print $2}') if [ $totMem -lt $thresh ]; then echo "Total Memory $totMem is less than: $thresh" exit 1 else echo "Total Memory is: $totMem" fi |
case statement
Syntax | Examples |
case expression in pattern1) commands ;; pattern2) commands ;; esac | #!/bin/bash archLoc=/dev/sdb2 usedSpc=$(df -h $archLoc | awk '{print $5}' | grep -v Use | cut -d "%" -f1 - ) case $usedSpc in [0-9]) arcStat="relax, lots of disk space: $usedSpc" ;; [1-7][0-9]) arcStat="disk space okay: $usedSpc" ;; [8][0-9]) arcStat="gulp, space getting low: $usedSpc" ;; [9][0-9]) arcStat="red alert, running out of space: $usedSpc" ;; [1][0][0]) arcStat="update resume, no space left; $usedSpc" ;; *) arcStat="huh?: $usedSpc" esac BOX=$(uname -a | awk '{print $2}') echo "archive space on: $BOX $arcStat" exit 0 |
for loop
Syntax | Examples |
for name [in list] do commands can use $name done | #!/bin/bash LOC_LIST="/backup /u01 /u02 /u03" msg="" for curLoc in $LOC_LIST do usedSpc=$(df -h $curLoc | awk '{print $5}' | grep -v Use | cut -d "%" -f1 - ) case $usedSpc in [0-8][0-9]) msg="Space getting low: $curLoc on $(uname -a | awk '{print $2}') is used ${usedSpc}%" ;; [9][0-9]) msg="Running out of space: $curLoc on $(uname -a | awk '{print $2}') is used ${usedSpc}%" ;; [1][0][0]) msg="No space left: $curLoc on $(uname -a | awk '{print $2}') is used ${usedSpc}%" ;; esac done if [ -n "$msg" ] ; then echo $msg fi exit 0 |
Command substitution
There are two techniques for archiving command substitution in shell script:
variable=$(shell commands)
variable=`shell commands`
Either technique is a valid method. Depending on which shell you use, the $(command) command substitution might not be available.
Other example:
variable=$(shell commands)
variable=`shell commands`
$BOX=$(uname -a | awk '{print$2}')
$BOX=`uname -a | awk '{print$2}'`
$BOX=`uname -a | awk '{print$2}'`
Either technique is a valid method. Depending on which shell you use, the $(command) command substitution might not be available.
Other example:
Pgm=$(basename $0)
if [ $# -ne 1 ]
then
echo "Wrong number of parameters passed to script."
echo "Usage: $Pgm ORACLE_SID"
exit 1
fi
if [ $# -ne 1 ]
then
echo "Wrong number of parameters passed to script."
echo "Usage: $Pgm ORACLE_SID"
exit 1
fi
.
No comments:
Post a Comment
leave your message if you need help ...