Difference between revisions of "Script Course"

From rbachwiki
Jump to navigation Jump to search
Line 81: Line 81:
the word “the,” you can use the following command:'''
the word “the,” you can use the following command:'''
   cat prologue | sed /the/d
   cat prologue | sed /the/d
[[File:Bashenvvariables.png|thumb|Bash Environment Variables]]
 
===AWK Command===
===AWK Command===
'''Like sed, the awk command searches for patterns of text and performs some action on the text found. However, the awk command treats each line of text as a record in a database, and each word in a line as a database field. For example, the line “Hello, how are you?” has four fields: “Hello,” “how,” “are,” and “you?”. These fields can be referenced in the awk command using $1, $2, $3, and $4. For example, to display only the first and fourth words only on lines of the prologue file that contains the word “the,” you can use the fol- lowing command:
'''Like sed, the awk command searches for patterns of text and performs some action on the text found. However, the awk command treats each line of text as a record in a database, and each word in a line as a database field. For example, the line “Hello, how are you?” has four fields: “Hello,” “how,” “are,” and “you?”. These fields can be referenced in the awk command using $1, $2, $3, and $4. For example, to display only the first and fourth words only on lines of the prologue file that contains the word “the,” you can use the fol- lowing command:
'''
'''
   cat prologue | awk ’/the/ {print $1, $4}’
   cat prologue | awk ’/the/ {print $1, $4}’
[[File:Bashenvvariables.png|thumb|Bash Environment Variables]]
'''By default, the awk command uses space or tab characters as delimiters for each field in a line. Most configuration files on Linux systems, however, are delimited using colon ( : ) char- acters. To change the delimiter that awk uses, you can specify the –F option to the com- mand. For example, the following example lists the last 10 lines of the colon-delimited file / etc/passwd and views only the 6th and 7th fields for lines that contain the word “bob” in the last 10 lines of the file'''
'''By default, the awk command uses space or tab characters as delimiters for each field in a line. Most configuration files on Linux systems, however, are delimited using colon ( : ) char- acters. To change the delimiter that awk uses, you can specify the –F option to the com- mand. For example, the following example lists the last 10 lines of the colon-delimited file / etc/passwd and views only the 6th and 7th fields for lines that contain the word “bob” in the last 10 lines of the file'''
   tail /etc/passwd | awk –F : ’/bob/ {print $6, $7}’
   tail /etc/passwd | awk –F : ’/bob/ {print $6, $7}’

Revision as of 17:43, 7 April 2019

File Operators Tests

Escape Sequence
Test Statements
Commands used with pipe
  • -d File True if file is a directory
  • -e File True if file exists
  • -f File True if file exists and is a regular file
  • -r File True if file is readable by you
  • -s File True if file exist and is not empty
  • -w File True if the file is writable by you
  • -x File True if the file is executable by you
  • -z String True if string is empty
  • -n String true if string is not empty

Syntax

[condition to test for]

Example

[ -e /etc/passwd ]
-e True if file exists

Exit Status return codes

  • Every command returns an exit status
  • range from 0 - 255
  • 0 = success
  • Other than 0 = error condition
  • use for error checking

$? Contains the return code of the previously executed command

ls /not/here
echo "$?"

-

HOST = "google.com"
ping -c 1 $HOST
if [ "$?" -eq "0" ]
then 
echo "$HOST reachable."
else
echo "$HOST unreachable"
fi

' And and || or

  • && = And : if first fails the other won't be executed
mkdir /tmp/bak && cp test.txt /tmp/bak/
  • || OR - if one fails the other will be processed
cp test.txt /tmp/bak || cp test.txt /tmp

Redirection

redirect to non error using status code 1 to filename goodoutput

ls /etc 1>goodoutput
ls /etc > 2>badoutput

Redirect both at the same time

ls /etc >goodoutput 2>badoutput

tee command, which takes information from Standard Input and sends that information to a file, as well as to Standard Output.

cat prologue|tr a A|sort|pr –d|tee newfile|less

Chaining multiple commands

cp test.txt /temp; cp test.text /tmp

Bash Functions

#!/bin/bash
function hello(){
for NAME in $@
do
 echo "Hello $NAME"
done
}

Call Script

hello Jason Dan Ryan

Those three names will be processed individually

SED Command

The sed command is typically used to search for a certain string of text, and replaces that text string with another text string using the syntax s/search/replace/. For example, the following output demonstrates how sed can be used to search for the string “the” and replace it with the string “THE”

cat filename.text | sed /s/the/THE

Notice from the preceding output that sed only searched for and replaced the first occur- rence of the string “the” in each line. To have sed globally replace all occurrences of the string “the” in each line, simply append a g to the search-and-replace expression:

cat prologue | sed s/the/THE/g

You can also force sed to perform a search-and-replace on certain lines only. To replace the string “the” with “THE” globally on lines 5 to 8 only, you can use the following command:

cat prologue | sed 5,8s/the/THE/g

You can also use sed to remove unwanted lines of text. To delete all the lines that contain the word “the,” you can use the following command:

 cat prologue | sed /the/d

AWK Command

Like sed, the awk command searches for patterns of text and performs some action on the text found. However, the awk command treats each line of text as a record in a database, and each word in a line as a database field. For example, the line “Hello, how are you?” has four fields: “Hello,” “how,” “are,” and “you?”. These fields can be referenced in the awk command using $1, $2, $3, and $4. For example, to display only the first and fourth words only on lines of the prologue file that contains the word “the,” you can use the fol- lowing command:

 cat prologue | awk ’/the/ {print $1, $4}’
Bash Environment Variables

By default, the awk command uses space or tab characters as delimiters for each field in a line. Most configuration files on Linux systems, however, are delimited using colon ( : ) char- acters. To change the delimiter that awk uses, you can specify the –F option to the com- mand. For example, the following example lists the last 10 lines of the colon-delimited file / etc/passwd and views only the 6th and 7th fields for lines that contain the word “bob” in the last 10 lines of the file

 tail /etc/passwd | awk –F : ’/bob/ {print $6, $7}’

List Environment Variables

Many environment variables are set by default in the BASH shell. To see a list of these vari- ables and their current values, you can use the set command,

set | less

Bash menu- Home