ome examples of very simple commands and features that become very powerful when used together. In future posts we'll see real examples of bash scripts used to create custom nagios checks/plugins.

Concatenate files – cat

# cat FILE1
this is the file1

# cat FILE2
this is the file2

# cat FILE1 FILE2
this is the file1
this is the file2
b


Output redirection – >  2> &>

Redirect standard output (stdout)

# cat FILE1 FILE2 > CONCATENATEDFILE
# cat CONCATENATEDFILE
this is the file1
this is the file2

This one is not redirected because the msg is printed in the error ouput (stderr), not the stdout

# cat NONEXISTINGFILE
cat: NONEXISTINGFILE: No such file or directory

# cat NONEXISTINGFILE > ERROR
cat: NONEXISTINGFILE: No such file or directory

Redirect error output (stderr)

# cat NONEXISTINGFILE 2> ERROR
# cat ERROR
cat: NONEXISTINGFILE: No such file or directory


Count number of lines – wc

# cat CONCATENATEDFILE | wc -l
2


Assign command output to a variable – VAR=`command`

# NUMLINES=`cat CONCATENATEDFILE | wc -l`
# echo $NUMLINES
2


Parse data fields separated by character – cut

# cat USERDATA
user1;user1@mail.com;This is the user 1;COD1111

# cat USERDATA | cut -d";" -f1,4
user1;COD1111
# cat USERDATA2
user2,user2@mail.com,This is the user 2,COD2222

# USERCODE=`cat USERDATA2 | cut -d"," -f4`
# USEREMAIL=`cat USERDATA2 | cut -d"," -f2`

# echo "The email address of the user with ID $USERCODE is $USEREMAIL"
The email address of the user with ID COD2222 is user2@mail.com


Parse data fields separated by character – awk

# cat USERDATA | awk -F";" '{ print $1" "$4 }'
user1 COD1111

# cat USERDATA2 | awk -F"," '{ print "The email address of the user with ID " $4 " is " $2 }'
The email address of the user with ID COD2222 is user2@mail.com


Remove blank lines – sed

# cat LINES
LINE1

LINE2
LINE3


LINE4

LINE5
LINE6
# cat LINES | sed '/^$/d'
LINE1
LINE2
LINE3
LINE4
LINE5
LINE6


Remove blank characters – tr

# cat VALUES
VALUE1: 008709
VALUE2: 005209

# cat VALUES | cut -d":" -f2
 008709
 005209

# cat VALUES | cut -d":" -f2 | tr -d " "
008709
005209


Last command exit status – $?

Success – $?=0

# cat EXISTINGFILE
# echo $?
0

Error – $?=1

# cat EXISTINGFILE
# echo $?
0
# cat NONEXISTINGFILE
cat: NONEXISTINGFILE: No such file or directory 
# echo $? 1


Compare files – diff

FILE1 != FILE2

# cat FILE1
1
2
3
4

# cat FILE2
1

3
4

# diff FILE1 FILE2
2c2
< 2
---
>
# echo $? 
1

FILE1 = FILE3

# diff FILE1 FILE3
# echo $?
0


Sort lines – sort

# cat FILE1
3
1
2

# cat FILE2
2
3
1

# diff FILE1 FILE2
0a1
> 2
3d3
< 2
# cat FILE1 | sort
1
2
3

# cat FILE2 | sort
1
2
3
# cat FILE1 | sort > FILE1-SORT
# cat FILE2 | sort > FILE2-SORT
# diff FILE1-SORT FILE2-SORT
# echo $?
0