Introduction to Shell Programming in Linux/Unix with Vim and Control Flow Commands

Shell Programming (ch 10)
IT244 - Introduction to Linux / Unix 
Instructor: Bo Sheng
1
Vim Commands
vim 
filename
Add contents: 
   
i/a
Back to command mode: 
 
ESC
Save the file:     
   
:w
Delete: 
    
x
Quit:
    
:q
2
Control Flow
 
The order of executing commands
if..then
3
Control Flow
The order of executing commands
if..then
Example
~it244/it244/scripts/if1
4
Control Flow
The order of executing commands
if..then
Built-in utility 
test
man test
Example
 (-eq)
~it244/it244/scripts/chkargs
$#: 
the number of arguments
exit 1: terminate with a status code ‘1’
5
Control Flow
The order of executing commands
if..then
Read arguments
Example
~it244/it244/scripts/read3args
6
Control Flow
The order of executing commands
if..then
test (-f) 
and arguments
Example
~it244/it244/scripts/is_ordfile
Other options (Table 10-1)
7
Control Flow
The order of executing commands
if..then
test ([ ]) 
and arguments
Example
~it244/it244/scripts/chkargs2
White spaces 
[
 
$# -eq 0
 
]
Output error message: 
echo … … 1>&2
8
Control Flow
The order of executing commands
if..then..else
9
Control Flow
The order of executing commands
if..then..else
Read arguments
Example ( 
shift
 )
~it244/it244/scripts/shift2args
Example ( 
$@
 )
~it244/it244/scripts/allargs
10
Control Flow
The order of executing commands
if..then..else
Optional arguments
Example
~it244/it244/scripts/out
11
Control Structure
if..then..elif
12
Control Structure
 
if..then..elif
Example: Compare 3 input words and find the match (word1,
word2, word3)
 
1
 
&
 
2
 
&
 
3
,
1
 
&
 
2
,
1
 
&
 
3
,
2
 
&
 
3
,
n
o
 
m
a
t
c
h
13
Control Structure
 
if..then..elif
Example: Compare 3 input words and find the match (word1,
word2, word3)
 
i
f
 
w
o
r
d
1
=
w
o
r
d
2
 
=
w
o
r
d
3
 
 
 
 
t
h
e
n
 
 
 
 
 
e
l
i
f
 
w
o
r
d
1
=
w
o
r
d
2
 
 
 
 
t
h
e
n
 
 
 
 
 
e
l
i
f
 
w
o
r
d
1
=
w
o
r
d
3
 
 
 
 
t
h
e
n
 
 
 
 
 
e
l
i
f
 
w
o
r
d
2
=
w
o
r
d
3
 
 
 
 
t
h
e
n
 
 
 
 
 
e
l
s
e
f
i
14
 
1 & 2 & 3
 
1 & 2
 
1 & 3
 
2 & 2
 
No match
Control Structure
if..then..elif
Example: Compare 3 input words and find the match (word1,
word2, word3)
Combine two conditions
test 
condition1
 -a 
condition2
test 
condition1
 -o 
condition2
~it244/it244/scripts/if3
15
Control Structure
for
 loop
for 
loop-index
 in 
argument-list
do
  
commands
done
Example
 
~it244/it244/scripts/fruit
 
~it244/it244/scripts/dirfiles
16
Control Structure
for
 loop
A range for argument-list
{1..10}, {a..z}
for 
loop-index
 in 
range
do
  
commands
done
Example
 
~it244/it244/scripts/for_range
 
~it244/it244/scripts/for_range2
17
Control Structure
for
 loop
Repeat operations
Example
 
~it244/it244/scripts/for_print
Nested loops
Example
 
~it244/it244/scripts/for_print2
18
Control Structure
for
 loop
for 
loop-index          
(in $@)
do
  
commands
done
Example
 
~it244/it244/scripts/for_test
19
Control Structure
while
 loop
 
while 
test-command
  
 
do
  
commands
 
done
20
Control Structure
while
 loop
 
while 
test-command
  
 
do
  
commands
 
done
Example:
 ~it244/it244/scripts/count
Arithmetic evaluation: 
((a=b+2))
~it244/it244/scripts/for_while_print
21
Control Structure
until
 loop
 
until 
test-command
  
 
do
  
commands
 
done
22
Control Structure
until
 loop
 
until 
test-command
  
 
do
  
commands
 
done
Example:
 ~it244/it244/scripts/guessnumber
  
 ~it244/it244/scripts/guessnumber2
23
Control Structure
break
 and 
continue
break: 
jump out of the loop
continue: 
proceed to
 “done”
Example:
 ~it244/it244/scripts/brk
24
Control Structure
select
select 
varname
 [in 
arg …
]
do
  
commands
done
Example
 
~it244/it244/scripts/select1
 
25
Control Structure
select
select 
varname
 [in 
arg …
]
do
  
commands
done
PS3
: select prompt
$REPLY
: index of the selected item
Terminate: exit, break
Example: 
~it244/it244/scripts/select2
26
Parameters and Variables
Special parameters
$#
: number of arguments
$1-$n
: arguments
$0
: name of the script
Example: 
~it244/it244/scripts/abc
./abc
~it244/it244/scripts/abc
basename: 
~it244/it244/scripts/abc2
basename ~it244/it244/scripts/abc
27
Parameters and Variables
Special parameters
$$
: PID number
echo $$
ps
Example: 
~it244/it244/scripts/id2
./id2
echo $$
28
Parameters and Variables
Special parameters
$?
: exit status
ls; echo $?
ls xyz; echo $?
cat yyy; echo $?
Example: 
~it244/it244/scripts/es
./es
echo $?
echo $?
29
Parameters and Variables
Initialize command-line arguments
set arg1 arg2 …
~it244/it244/scripts/set_it
date
~it244/it244/scripts/dateset
30
Some More Examples
 
Get file sizes
~/it244/it244/scripts/filesize
$ls -l
-rwxr-xr-x 1 it244 libuuid  50 2010-11-04 00:09 abc
-rwxr-xr-x 1 it244 libuuid  62 2010-11-04 00:10 abc2
-rwxr-xr-x 1 it244 libuuid  79 2010-11-04 00:49 bb1
-rwxr-xr-x 1 it244 libuuid  79 2010-11-04 00:49 bb2
… … …
 
for i in *
do
  set -- $(ls -l "$i")
  echo $i: $5 bytes
done
31
File Descriptors
 
An index number of a open file
3 system file descriptors
0(std input), 1(std output), 2(std err)
Create a file descriptor
exec 
n
 > 
outfile
exec 
m
 < 
infile
exec n<>file
exec n>>outfile
32
File Descriptors
 
Duplicate a file descriptor
exec 
n
<&
m
exec 
n
>&
m
Close a file descriptor
exec 
n
<&-
 
Example:
 
~it244/it244/scripts/exec_read
  
~it244/it244/scripts/exec_write
33
File Descriptors
 
Example:
 
~it244/it244/scripts/exec_read
 
exec 3<"$1"
 
while 
read <&3 myline
 
do
  
  
echo "*** $myline ***"
 
done
 
File descriptor is “3” ($1 is the first argument)
&3 represents the input file in the program (a pointer)
“read <&3 myline” 
read a line from the file and assign it to
variable 
“myline” 
(pointer &3 moves to the next line)
34
File Descriptors
 
Example:
 
~it244/it244/scripts/exec_read
 
exec 3<"$1"
 
while read <&3 myline
 
do
  
  
echo "*** $myline ***"
 
done
 
Command as a condition
True: if the exit status is 0 (successfully executed)
False: if the exit status > 0 (sth went wrong)
“read” gets an error when EOF is reached
35
Built-in Commands
 
Do not fork a new process
type cat echo who if
 
read
” user input
read firstline
echo “$firstline”
~it244/it244/scripts/read1
~it244/it244/scripts/read1_no_quote
 
type in
 this is *
36
Built-in Commands
 
read
” user input
REPLY
”: default variable for “
read
~it244/it244/scripts/read1a
“-p” 
option: with prompt
read -p “Enter a command: ” cmd
~it244/it244/scripts/read2
read
” multiple variables
~it244/it244/scripts/read3
 
type in 
this is sth else
37
Built-in Commands
read
” user input
read
” from files
read line1 < names
echo $line1
read line2 < names
echo $line2
(read line1; echo $line1;
  read line2; echo $line2) < names
38
Built-in Commands
read
” user input
read
” from files
~it244/it244/scripts/readfile
./readfile < names
-u 
option
exec 3<names
read –u3 line1  (read <&3 line1)
echo $line1
read –u3 line2
echo $line2
exec 3<&-
39
Built-in Commands
trap
” : catch a signal
Signal: a report about a condition (Table 10-5)
kill -l, trap -l, man 7 signal
  
trap 
[‘commands’] [signal]
‘’ is not required but highly suggested
Example: 
~it244/it244/scripts/inter
40
Built-in Commands
trap
” : catch a signal
trap ‘’ signal: 
ignore the signal
Example
2: CTRL+C, 20: CTRL+Z
~it244/it244/scripts/locktty
stty  (input secret/passwd)
~it244/it244/scripts/locktty2
Multiple traps
~it244/it244/scripts/cleanfile
41
Built-in Commands
kill
” : abort a process
  
kill [-signal] PID
The KILL signal (9)
kill -9 %1
42
Expressions
Arithmetic evaluation
a=10; b=5;
let a=a*10+b; echo $a
No path expansion 
(*)
((a=a*10+b))
let “a=a+1” b=a*b
((a=a+1, b=a*b))
43
 
Expressions
 
Logic expression (( )), [[ ]]
In 
[[]]
,
 
must precede a variable name with 
$
>, <, -lt, -gt, …
&& 
(and)
, || 
(or)
~it244/it244/scripts/age2
String comparison
[[ “aa” < “bbb” ]]
[[ artist = a* ]]; echo $?
[[ a* = artist ]]; echo $?
44
 
Expressions
 
Arithmetic operators
+,-,*,/,%
a=5;b=3;echo $((a%b))
var++, var--, ++var, --var
echo $((a++)); echo $a
echo $((--a)); echo $a
echo $((a+++3))
echo $((a++---b))
~it244/it244/scripts/printstar
45
 
Expressions
 
Logical operators
true, false
true; echo $?; false; echo $?
!, ==, !=
((1==1)); echo $?; echo $((1==1))
((1!=1)); echo $?; echo $((1!=1))
&&, ||
true && false; echo $?
true || false; echo $?
ls –l testop && cat testop; echo $?
ls –l testop || cat testop; echo $?
 
46
 
Expressions
 
Logical operators
&&, ||
Short-circuiting:
Cond1 && Cond2
: does not evaluate 
Cond2
 if 
Cond1
 is false
Cond1 || Cond2
: does not evaluate 
Cond2
 if 
Cond1
 is true
Example
mkdir bkup && cp testop bkup
rm bkup/*
mkdir bkup && cp testop bkup; ls bkup
 
mkdir bkup || echo “mkdir failed”
 
a=1;b=2;echo $((a||b++));echo $b
47
 
Slide Note
Embed
Share

Explore the basics of shell programming in Linux/Unix, including Vim commands for editing files, control flow commands like if-then statements, and examples of executing commands with built-in utilities. Learn how to handle arguments, read input, and implement conditional logic in scripts.

  • Shell Programming
  • Linux/Unix
  • Vim Commands
  • Control Flow
  • Shell Scripting

Uploaded on Oct 03, 2024 | 0 Views


Download Presentation

Please find below an Image/Link to download the presentation.

The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. Download presentation by click this link. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.

E N D

Presentation Transcript


  1. Shell Programming (ch 10) IT244 - Introduction to Linux / Unix Instructor: Bo Sheng 1

  2. Vim Commands vim filename Add contents: Back to command mode: Save the file: Delete: Quit: i/a ESC :w x :q 2

  3. Control Flow The order of executing commands if..then 3

  4. Control Flow The order of executing commands if..then Example ~it244/it244/scripts/if1 4

  5. Control Flow The order of executing commands if..then Built-in utility test man test Example (-eq) ~it244/it244/scripts/chkargs $#: the number of arguments exit 1: terminate with a status code 1 5

  6. Control Flow The order of executing commands if..then Read arguments Example ~it244/it244/scripts/read3args 6

  7. Control Flow The order of executing commands if..then test (-f) and arguments Example ~it244/it244/scripts/is_ordfile Other options (Table 10-1) 7

  8. Control Flow The order of executing commands if..then test ([ ]) and arguments Example ~it244/it244/scripts/chkargs2 White spaces [ $# -eq 0 ] Output error message: echo 1>&2 8

  9. Control Flow The order of executing commands if..then..else 9

  10. Control Flow The order of executing commands if..then..else Read arguments Example ( shift ) ~it244/it244/scripts/shift2args Example ( $@ ) ~it244/it244/scripts/allargs 10

  11. Control Flow The order of executing commands if..then..else Optional arguments Example ~it244/it244/scripts/out 11

  12. Control Structure if..then..elif 12

  13. Control Structure if..then..elif Example: Compare 3 input words and find the match (word1, word2, word3) 1 & 2 & 3, 1 & 2, 1 & 3, 2 & 3, no match 13

  14. Control Structure if..then..elif Example: Compare 3 input words and find the match (word1, word2, word3) if word1=word2 =word3 then elif word1=word2 then elif word1=word3 then elif word2=word3 then else fi 1 & 2 & 3 1 & 2 1 & 3 2 & 2 No match 14

  15. Control Structure if..then..elif Example: Compare 3 input words and find the match (word1, word2, word3) Combine two conditions test condition1 -a condition2 test condition1 -o condition2 ~it244/it244/scripts/if3 15

  16. Control Structure for loop for loop-index in argument-list do commands done Example ~it244/it244/scripts/fruit ~it244/it244/scripts/dirfiles 16

  17. Control Structure for loop A range for argument-list {1..10}, {a..z} for loop-index in range do commands done Example ~it244/it244/scripts/for_range ~it244/it244/scripts/for_range2 17

  18. Control Structure for loop Repeat operations Example ~it244/it244/scripts/for_print Nested loops Example ~it244/it244/scripts/for_print2 18

  19. Control Structure for loop for loop-index (in $@) do commands done Example ~it244/it244/scripts/for_test 19

  20. Control Structure while loop while test-command do commands done 20

  21. Control Structure while loop while test-command do commands done Example: ~it244/it244/scripts/count Arithmetic evaluation: ((a=b+2)) ~it244/it244/scripts/for_while_print 21

  22. Control Structure until loop until test-command do commands done 22

  23. Control Structure until loop until test-command do commands done Example: ~it244/it244/scripts/guessnumber ~it244/it244/scripts/guessnumber2 23

  24. Control Structure break and continue break: jump out of the loop continue: proceed to done Example: ~it244/it244/scripts/brk 24

  25. Control Structure select select varname [in arg ] do commands done Example ~it244/it244/scripts/select1 25

  26. Control Structure select select varname [in arg ] do commands done PS3: select prompt $REPLY: index of the selected item Terminate: exit, break Example: ~it244/it244/scripts/select2 26

  27. Parameters and Variables Special parameters $#: number of arguments $1-$n: arguments $0: name of the script Example: ~it244/it244/scripts/abc ./abc ~it244/it244/scripts/abc basename: ~it244/it244/scripts/abc2 basename ~it244/it244/scripts/abc 27

  28. Parameters and Variables Special parameters $$: PID number echo $$ ps Example: ~it244/it244/scripts/id2 ./id2 echo $$ 28

  29. Parameters and Variables Special parameters $?: exit status ls; echo $? ls xyz; echo $? cat yyy; echo $? Example: ~it244/it244/scripts/es ./es echo $? echo $? 29

  30. Parameters and Variables Initialize command-line arguments set arg1 arg2 ~it244/it244/scripts/set_it date ~it244/it244/scripts/dateset 30

  31. Some More Examples Get file sizes ~/it244/it244/scripts/filesize $ls -l -rwxr-xr-x 1 it244 libuuid -rwxr-xr-x 1 it244 libuuid -rwxr-xr-x 1 it244 libuuid -rwxr-xr-x 1 it244 libuuid 50 2010-11-04 00:09 abc 62 2010-11-04 00:10 abc2 79 2010-11-04 00:49 bb1 79 2010-11-04 00:49 bb2 for i in * do set -- $(ls -l "$i") echo $i: $5 bytes done 31

  32. File Descriptors An index number of a open file 3 system file descriptors 0(std input), 1(std output), 2(std err) Create a file descriptor exec n > outfile exec m < infile exec n<>file exec n>>outfile 32

  33. File Descriptors Duplicate a file descriptor exec n<&m exec n>&m Close a file descriptor exec n<&- Example: ~it244/it244/scripts/exec_read ~it244/it244/scripts/exec_write 33

  34. File Descriptors Example: ~it244/it244/scripts/exec_read exec 3<"$1" while read <&3 myline do echo "*** $myline ***" done File descriptor is 3 ($1 is the first argument) &3 represents the input file in the program (a pointer) read <&3 myline read a line from the file and assign it to variable myline (pointer &3 moves to the next line) 34

  35. File Descriptors Example: ~it244/it244/scripts/exec_read exec 3<"$1" while read <&3 myline do echo "*** $myline ***" done Command as a condition True: if the exit status is 0 (successfully executed) False: if the exit status > 0 (sth went wrong) read gets an error when EOF is reached 35

  36. Built-in Commands Do not fork a new process type cat echo who if read user input read firstline echo $firstline ~it244/it244/scripts/read1 ~it244/it244/scripts/read1_no_quote type in this is * 36

  37. Built-in Commands read user input REPLY : default variable for read ~it244/it244/scripts/read1a -p option: with prompt read -p Enter a command: cmd ~it244/it244/scripts/read2 read multiple variables ~it244/it244/scripts/read3 type in this is sth else 37

  38. Built-in Commands read user input read from files read line1 < names echo $line1 read line2 < names echo $line2 (read line1; echo $line1; read line2; echo $line2) < names 38

  39. Built-in Commands read user input read from files ~it244/it244/scripts/readfile ./readfile < names -u option exec 3<names read u3 line1 (read <&3 line1) echo $line1 read u3 line2 echo $line2 exec 3<&- 39

  40. Built-in Commands trap : catch a signal Signal: a report about a condition (Table 10-5) kill -l, trap -l, man 7 signal trap [ commands ] [signal] is not required but highly suggested Example: ~it244/it244/scripts/inter 40

  41. Built-in Commands trap : catch a signal trap signal: ignore the signal Example 2: CTRL+C, 20: CTRL+Z ~it244/it244/scripts/locktty stty (input secret/passwd) ~it244/it244/scripts/locktty2 Multiple traps ~it244/it244/scripts/cleanfile 41

  42. Built-in Commands kill : abort a process kill [-signal] PID The KILL signal (9) kill -9 %1 42

  43. Expressions Arithmetic evaluation a=10; b=5; let a=a*10+b; echo $a No path expansion (*) ((a=a*10+b)) let a=a+1 b=a*b ((a=a+1, b=a*b)) 43

  44. Expressions Logic expression (( )), [[ ]] In [[]], must precede a variable name with $ >, <, -lt, -gt, && (and), || (or) ~it244/it244/scripts/age2 String comparison [[ aa < bbb ]] [[ artist = a* ]]; echo $? [[ a* = artist ]]; echo $? 44

  45. Expressions Arithmetic operators +,-,*,/,% a=5;b=3;echo $((a%b)) var++, var--, ++var, --var echo $((a++)); echo $a echo $((--a)); echo $a echo $((a+++3)) echo $((a++---b)) ~it244/it244/scripts/printstar 45

  46. Expressions Logical operators true, false true; echo $?; false; echo $? !, ==, != ((1==1)); echo $?; echo $((1==1)) ((1!=1)); echo $?; echo $((1!=1)) &&, || true && false; echo $? true || false; echo $? ls l testop && cat testop; echo $? ls l testop || cat testop; echo $? 46

  47. Expressions Logical operators &&, || Short-circuiting: Cond1 && Cond2: does not evaluate Cond2 if Cond1 is false Cond1 || Cond2: does not evaluate Cond2 if Cond1 is true Example mkdir bkup && cp testop bkup rm bkup/* mkdir bkup && cp testop bkup; ls bkup mkdir bkup || echo mkdir failed a=1;b=2;echo $((a||b++));echo $b 47

More Related Content

giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#giItT1WQy@!-/#