Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
223 views

Linux Shell Scripting Advanced

This document discusses advanced Linux shell scripting topics including commands, command line arguments, redirection of input/output, pipes and filters, processing in background, conditionals using if/test/if else fi, loops using for and do, and the read statement. It provides examples of using the read statement to get input from the user and store it in a variable. It also covers wild cards, running multiple commands on one line using semicolons, command line arguments and how they are referenced, and the redirection symbols >, >>, and < for output and input redirection. Pipes are described as connecting the output of one program to the input of another without a temporary file. Filters are discussed as accepting standard input and producing standard

Uploaded by

Juan Martinez
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
223 views

Linux Shell Scripting Advanced

This document discusses advanced Linux shell scripting topics including commands, command line arguments, redirection of input/output, pipes and filters, processing in background, conditionals using if/test/if else fi, loops using for and do, and the read statement. It provides examples of using the read statement to get input from the user and store it in a variable. It also covers wild cards, running multiple commands on one line using semicolons, command line arguments and how they are referenced, and the redirection symbols >, >>, and < for output and input redirection. Pipes are described as connecting the output of one program to the input of another without a temporary file. Filters are discussed as accepting standard input and producing standard

Uploaded by

Juan Martinez
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 37

LINUX Shell Scripting

Advanced Issues

Yusuf Altunel

1
Content
 Commands
 Command Line Arguments
 Redirection of Input/Output
 Pipes and Filters
 Programming in Background
 Conditionals
 if
 test
 if else fi
 Loops
 for loop
 do loop

2
The read Statement
 Use to get input (data from user) from keyboard and
store (data) to variable.
Syntax:
read variable1, variable2,...variableN
 Example: Write a shell script to
 first ask user, name
 then waits to enter name from the user via keyboard.

 Then user enters name from keyboard (after giving name you

have to press ENTER key)


 entered name through keyboard is stored (assigned) to
variable fname.
Solution is in the next slide

3
Example (read Statement)
$ vi sayH
#
#Script to read your name from key-board
#
echo "Your first name please:"
read fname
echo "Hello $fname, Lets be friend!"

 Run it as follows:
$ chmod 755 sayH
$ ./sayH
Your first name please: vivek
Hello vivek, Lets be friend!

4
Wild Cards
Wild card
Meaning Examples
/Shorthand

$ ls * will show all files

will show all files whose first name is starting with


$ ls a*
letter 'a'
Matches any string
* or group of
characters. $ ls *.c will show all files having extension .c

will show all files having extension .c but file name


$ ls ut*.c
must begin with 'ut'.

$ ls ? will show all files whose names are 1 character long


Matches any single
?
character. will show all files whose names are 3 character long
$ ls fo?
and file name begin with fo
Matches any one of
[...] the enclosed $ ls [abc]* will show all files beginning with letters a,b,c
characters
5
More commands on one command line
 Syntax:
command1;command2
To run two command in one command line.
 Examples:

 $ date;who
Will print today's date followed by users who are currently
login.

 Note that You can't use


$ date who
for same purpose, you must put semicolon
 in between the date and who command.

6
Command Line Arguments
1. Telling the command/utility
 which option to use.
2. Informing the utility/command
 which file or group of files to process
 Let's take rm command,
 is used to remove file,
 which of the file?
 how to tail this to rm command
 rm command does not ask the name of the file
 So what we do is to write command as follows:

 $ rm {file-name}
rm : is the command
file-name :file to remove

7
Arguments - Specification
$ myshell foo bar

Shell Script name i.e. myshell


First command line argument passed to myshell i.e. foo
Second command line argument passed to myshell i.e. bar
In shell if we wish to refer this command line argument we refer above as
follows
myshell it is $0
foo it is $1
bar it is $2
•Here $# (built in shell variable ) will be 2 (Since foo and bar only two
Arguments),
•Please note at a time such 9 arguments can be used from $1..$9,
•You can also refer all of them by using $* (which expand to `$1,$2...$9`).
•Note that $1..$9 i.e command line arguments to shell script is know as
"positional parameters".
8
Arguments - Example
$ vi demo
#!/bin/sh
#
# Script that demos, command line args
#
echo "Total number of command line argument are $#"
echo "$0 is script name"
echo "$1 is first argument"
echo "$2 is second argument"
echo "All of them are :- $* or $@"
•Run it as follows
•Set execute permission as follows:
$ chmod 755 demo
•Run it & test it as follows:
$ ./demo Hello World
•If test successful, copy script to your own bin directory (Install script for private use)
$ cp demo ~/bin
•Check whether it is working or not (?)
$ demo
$ demo Hello World
9
Redirection of Input/Output

 In Linux (and in other OSs also)


 it's possible to send output to file
 or to read input from a file
 For e.g.
$ ls command gives output to screen;
 to send output to file of ls command give command
ls > filename
It means put output of ls command to filename.

10
redirection symbols: ‘>’
 There are three main redirection symbols: >,>>,<
(1) > Redirector Symbol
Syntax:
Linux-command > filename

 To output Linux-commands result to file.


 Note that if the file already exist,
 it will be overwritten
 else a new file will be created.

 For e.g.
 To send output of ls command give
$ ls > myfiles

 if 'myfiles' exist in your current directory


 it will be overwritten without any warning.

11
redirection symbols: ‘>>’
(2) >> Redirector Symbol
Syntax:
Linux-command >> filename
 To output Linux-commands result
 to the END of the file.

 if file exist:
 it will be opened
 new information/data will be written to the END of the file,
 without losing previous information/data,
 if file does not exist, a new file is created.
 For e.g.
 To send output of date command
 to already exist file give command
$ date >> myfiles

12
redirection symbols: ‘<’

(3) < Redirector Symbol


Syntax:
Linux-command < filename

 To provide input to Linux-command


 from the file instead of standart input (key-board).

 For e.g. To take input for cat command give


$ cat < myfiles

13
Pipes
 A pipe is a way
 to connect the output of one program
 to the input of another program
 without any temporary file.
 Definition
 "A pipe is nothing but a temporary storage place
 where the output of one command
 is stored and then passed
 as the input for second command.
 Pipes are used
 to run more than two commands
 Multiple commands
 from same command line."

 Syntax:
command1 | command2
14
Pipe - Examples
Command using Pipes Meaning or Use of Pipes

Output of ls command is given as input to the command more


$ ls | more So output is printed one screen full page at a time.
Output of who command is given as input to sort command
$ who | sort
So it will print sorted list of users
$ who | sort > Same as above except output of sort is send to (redirected) the file

user_list named user_list


who command provides the input of wc command
$ who | wc -l
So it will count the users logged in.
ls command provides the input of wc command
$ ls -l | wc -l
So it will count files in current directory.
Output of who command is given as input to grep command
So it will print if particular user is logged in. Otherwise nothing is
$ who | grep raju
printed
15
Filter

 Accepting the input


 from the standard input
 and producing the result
 on the standard output
 is know as a filter.
 A filter
 performs some kind of process on the input
 and provides output.

16
Filter: Examples
 Suppose you have a file
 called 'hotel.txt'
 with 100 lines data,
 you would like to print the content
 only between the line numbers 20 and 30
 and then store this result to the file 'hlist'
 The appropriate command:
$ tail +20 < hotel.txt | head -n30 >hlist
 Here head command is filter:
 takes its input from tail command
 tail command starts selecting
 from line number 20 of given file
 i.e. hotel.txt
 and passes this lines as input to the head,
 whose output is redirected
 to the 'hlist' file.

17
Filter: Examples

 Consider one more following example


$ sort < sname | uniq > u_sname
 Here uniq is filter
 takes its input from sort command
 and redirects to "u_sname" file.

18
Processing in Background
 Use ampersand (&)
 at the end of command
 To start the execution in background
 and enable the user to continue his/her processing
 during the execution of the command
 without interrupting
 $ ls / -R | wc -l
 This command will take lot of time
 to search all files on your system.

 So you can run such commands


 in Background or simultaneously
 by adding the ampersand (&):
 $ ls / -R | wc -l&

19
Commands Related With Processes
For this purpose Use this Command Examples

To see currently running process ps $ ps

To stop any process by PID i.e. to kill process kill {PID} $ kill 1012

To stop processes by name i.e. to kill process killall {Proc-name} $ killall httpd

To get information about all running process ps -ag $ ps -ag

To stop all process except your shell kill 0 $ kill 0

For background processing (With &, use to put linux-command & $ ls / -R | wc -l &
particular command and program in background)

To display the owner of the processes along with ps aux $ ps aux


the processes
For e.g. you want to see whether
To see if a particular process is running or not. Apache web server process is
For this purpose you have to use ps command in ps ax | grep {Proc-name}
running or not then give command
combination with the grep command $ ps ax | grep httpd

To see currently running processes and other $ top


information like memory and CPU usage with real top Note that to exit from
top command press q.
time updates.

To display a tree of processes pstree $ pstree


20
if condition

 if condition
 used for making decisions in shell script,
 If the condition is true
 then command1 is executed.

 Syntax:
if condition then command1 if condition is true or if
exit status of condition is 0 (zero) ... ... fi
 condition
 is defined as:
"Condition is nothing but comparison between two values."

 For compression
 you can use test
 or [ expr ] statements
 or even exist status

21
if condition - Examples
 $ cat > showfile
#!/bin/sh
#
#Script to print file
#
if cat $1
then
echo -e "\n\nFile $1, found and successfully echoed"
fi
 Run above script as:
$ chmod 755 showfile
$./showfile foo

 Shell script name is: showfile ($0)


 The argument is foo ($1).
 Then shell compare it as follows:
if cat $1 :is expanded to if cat foo.

22
Example: Detailed explanation
 if cat command finds foo file
and if its successfully shown on screen,
 it means our cat command
 is successful and
 its exist status is 0 (indicates success),
 So our if condition is also true
 the statement echo -e "\n\nFile $1, found and successfully echoed"
 is proceed by shell.
 if cat command is not successful
 then it returns non-zero value
 indicates some sort of failure
 the statement echo -e "\n\nFile $1, found and successfully
echoed"
 is skipped by our shell.

23
test command or [ expr ]

 test command or [ expr ]


 is used to see if an expression is true,
 and if it is true it return zero(0),
 otherwise returns nonzero for false.

 Syntax:
test expression or [ expression ]

24
test command - Example
 determine whether given argument number is positive.
 $ cat > ispostive
#!/bin/sh
#
# Script to see whether argument is positive
#
if test $1 -gt 0
then
echo "$1 number is positive"
fi
 Run it as follows
$ chmod 755 ispostive
 $ ispostive 5
5 number is positive
 $ispostive -45
Nothing is printed

25
Mathematical Operators
Normal
Mathematical
Arithmetical/
Operator Meaning But in Shell
Mathematical
in Shell Script
Statements
For test
For [ expr ] statement
statement with
if command with if command

-eq is equal to 5 == 6 if test 5 -eq 6 if [ 5 -eq 6 ]

-ne is not equal to 5 != 6 if test 5 -ne 6 if [ 5 -ne 6 ]

-lt is less than 5<6 if test 5 -lt 6 if [ 5 -lt 6 ]

-le is less than or equal to 5 <= 6 if test 5 -le 6 if [ 5 -le 6 ]

-gt is greater than 5>6 if test 5 -gt 6 if [ 5 -gt 6 ]

-ge is greater than or equal to 5 >= 6 if test 5 -ge 6 if [ 5 -ge 6 ]

26
String Operators

Operator Meaning

string1 = string2 string1 is equal to string2

string1 != string2 string1 is NOT equal to string2

string1 string1 is NOT NULL or not defined

-n string1 string1 is NOT NULL and does exist

-z string1 string1 is NULL and does exist

27
File and Directory Operators
Test Meaning

-s file Non empty file

-f file File exists or is a normal file and not a directory

-d dir Directory exists and not a file

-w file file is a writeable file

-r file file is a read-only file

-x file file is executable

28
Logical Operators

Operator Meaning

! expression Logical NOT

expression1 -a expression2 Logical AND

expression1 -o expression2 Logical OR

29
if...else...fi
 If given condition is true
 then command1 is executed
 otherwise command2 is executed.

 Syntax:
if condition
then
condition is zero (true - 0)
execute all commands up to else statement
else
if condition is not true then
execute all commands up to fi
fi

30
if...else…fi
$ vi isnump_n
-Example
#!/bin/sh Try it as follows:
#
$ chmod 755 isnump_n
# Script to see whether argument is
$ isnump_n 5
positive or negative
5 number is positive
#
if [ $# -eq 0 ]
$ isnump_n -45
then -45 number is negative
echo "$0 : You must give/supply one
integers"
exit 1 $ isnump_n
fi ./ispos_n : You must
if test $1 -gt 0 give/supply one integers
then
echo "$1 number is positive" $ isnump_n 0
else echo "$1 number is negative“ 0 number is negative
fi

31
Loops in Shell Scripts
 Bash supports:
 for loop
 while loop
 Note that in each and every loop,
(a) First, the variable used in loop condition
 must be initialized,
 then execution of the loop begins.
(b) A test (condition) is made
at the beginning of each iteration.
(c) The body of loop ends
with a statement modifies
the value of the test (condition) variable.
32
for Loop
 Syntax:
for { variable name } in { list }
do
execute one for each item in the list
until the list is not finished
(And repeat all statements between do and done)
done

33
for Loop: Example
Example:
$ cat > testfor •The for loop first creates i variable
for i in 1 2 3 4 5 •and assigned a number to i from the
do list of numbers 1 to 5,
•The shell executes echo statement for each
echo "Welcome $i times" assignment of i.
•This process will continue until all the
done items in the list were not finished,
•because of this it will repeat 5 echo
statements.

Run it above script as follows:


$ chmod +x testfor
$ ./testfor

34
for loop - Example
 $ vi chessboard
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ###
do
tot=`expr $i + $j`
tmp=`expr $tot % 2`
if [ $tmp -eq 0 ]; then
echo -e -n "\033[47m "
else
echo -e -n "\033[40m "
fi
done
echo -e -n "\033[40m" #### set back background colour to
black
echo "" #### print the new line ###
done

35
while Loop
 Syntax:
while [ condition ]
do
command1
command2
..
....
done

Example:
while [ $i -le 10 ]
do
echo "$n * $i = `expr $i \* $n`"
i=`expr $i + 1`
done

36
End of Chapter

LINUX Shell Scripting


Advanced Issues

37

You might also like