Topic 2: Bash Shell Programming *

Σχετικά έγγραφα
Topic 2: Bash Shell Programming * K24: Systems Programming Instructor: Mema Roussopoulou

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Εργαστήριο 6 Ασκήσεις: To Εργαλείo Ωφελιμότητας Awk Προγραμματισμός Κελύφους Bash

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Shell Scripts: loops / if / test

Εισαγωγή στα Λειτουργικά Συστήματα

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

ΑΣΚΗΣΗ 2 -ΑΚΥΡΩΣΗ ΣΗΜΑΣΙΑΣ ΕΙΔΙΚΩΝ ΧΑΡΑΚΤΗΡΩΝ

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ I

Λειτουργικά Συστήματα

A ΜΕΡΟΣ. 1 program Puppy_Dog; 2 3 begin 4 end. 5 6 { Result of execution 7 8 (There is no output from this program ) 9 10 }

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 6/5/2006

Λειτουργικά Συστήματα. Shell Programming

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 19/5/2007

ΚΥΠΡΙΑΚΟΣ ΣΥΝΔΕΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY 21 ος ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Δεύτερος Γύρος - 30 Μαρτίου 2011

Εργαστήριο Λειτουργικών Συστημάτων. Shell Programming

Λειτουργικά Συστήματα. Άσκηση Πράξη. Shell Programming

ΧΑΡΟΚΟΠΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

Μερικές άλλες χρήσιμες εντολές

Εισαγωγή στα Λειτουργικά Συστήματα

The Simply Typed Lambda Calculus

*? [xyz] [^xy] [!0-9] [:alpha:] [:digit:]

EE512: Error Control Coding

Διάλεξη 7 Εργαλεία Ωφελιμότητας Unix: Αwk

ΕΠΛ 012. JavaScripts

2 Composition. Invertible Mappings

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Section 8.3 Trigonometric Equations

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

(C) 2010 Pearson Education, Inc. All rights reserved.

Αβδέλαρου Κωνσταντίνα

wc -l <file1 10 ή να μετρήσω πόσες γραμμές δίνει μια οποιαδήποτε άλλη εντολή π.χ. η finger : finger wc -l 8

Phys460.nb Solution for the t-dependent Schrodinger s equation How did we find the solution? (not required)

Μορφοποίηση υπό όρους : Μορφή > Μορφοποίηση υπό όρους/γραμμές δεδομένων/μορφοποίηση μόο των κελιών που περιέχουν/

C.S. 430 Assignment 6, Sample Solutions

Instruction Execution Times

Elements of Information Theory

Στο εργαστήριο θα μελετηθούν: Διδάσκων: Γιώργος Χατζηπολλάς. Εργαστήριο 2: Εργαλεία Συστήματος UNIX. Ομάδες για παρουσίαση

An Inventory of Continuous Distributions

alpha Language age (3/5) alpha Language Φροντιστήριο Syntax Directed Translation and

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Every set of first-order formulas is equivalent to an independent set

Μερικές άλλες χρήσιμες εντολές

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 11/3/2006

Work12 REMARKS script file lab10 ask1-5 tabbing, ls2, urlparse, times, dates_correct

ANSWERSHEET (TOPIC = DIFFERENTIAL CALCULUS) COLLECTION #2. h 0 h h 0 h h 0 ( ) g k = g 0 + g 1 + g g 2009 =?

FORTRAN & Αντικειμενοστραφής Προγραμματισμός ΣΝΜΜ 2017

Εισαγωγή στη Fortran. Μάθημα 1 ο. Ελευθερία Λιούκα

Εισαγωγή στη Matlab 2 Εισαγωγή στην Αριθμητική Ανάλυση Διδάσκων: Γεώργιος Ακρίβης Βοηθός: Δημήτριος Ζαβαντής

3.4 SUM AND DIFFERENCE FORMULAS. NOTE: cos(α+β) cos α + cos β cos(α-β) cos α -cos β

Εργαστήριο Οργάνωσης Η/Υ. Δαδαλιάρης Αντώνιος

Συστήματα Διαχείρισης Βάσεων Δεδομένων

Εισαγωγή στον Προγραμματισμό

Fractional Colorings and Zykov Products of graphs

Homework 3 Solutions

Physical DB Design. B-Trees Index files can become quite large for large main files Indices on index files are possible.

k A = [k, k]( )[a 1, a 2 ] = [ka 1,ka 2 ] 4For the division of two intervals of confidence in R +

Finite Field Problems: Solutions

derivation of the Laplacian from rectangular to spherical coordinates

Inverse trigonometric functions & General Solution of Trigonometric Equations

Εισαγωγή στη Βιοπληροφορική

Εργαστήριο Ανάπτυξης Εφαρμογών Βάσεων Δεδομένων. Εξάμηνο 7 ο

department listing department name αχχουντσ ϕανε βαλικτ δδσϕηασδδη σδηφγ ασκϕηλκ τεχηνιχαλ αλαν ϕουν διξ τεχηνιχαλ ϕοην µαριανι

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ - ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΠΛ 133: ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΕΡΓΑΣΤΗΡΙΟ 3 Javadoc Tutorial

Dynamic types, Lambda calculus machines Section and Practice Problems Apr 21 22, 2016

Matrices and Determinants

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Example Sheet 3 Solutions

PERL. Δήμος Παύλου Δημήτρης Κουζαπάς

CHAPTER 25 SOLVING EQUATIONS BY ITERATIVE METHODS

PARTIAL NOTES for 6.1 Trigonometric Identities

Είσοδος -Έξοδος. Άνοιγµα αρχείου:

VBA ΣΤΟ WORD. 1. Συχνά, όταν ήθελα να δώσω ένα φυλλάδιο εργασίας με ασκήσεις στους μαθητές έκανα το εξής: Version ΗΜΙΤΕΛΗΣ!!!!

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

ΕΙΣΑΓΩΓΗ ΣΤΗ ΣΤΑΤΙΣΤΙΚΗ ΑΝΑΛΥΣΗ

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Other Test Constructions: Likelihood Ratio & Bayes Tests

Hancock. Ζωγραφάκης Ιωάννης Εξαρχάκος Νικόλαος. ΕΠΛ 428 Προγραμματισμός Συστημάτων

ω ω ω ω ω ω+2 ω ω+2 + ω ω ω ω+2 + ω ω+1 ω ω+2 2 ω ω ω ω ω ω ω ω+1 ω ω2 ω ω2 + ω ω ω2 + ω ω ω ω2 + ω ω+1 ω ω2 + ω ω+1 + ω ω ω ω2 + ω

Homework 8 Model Solution Section

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

Fortran και Αντικειµενοστραφής προγραµµατισµός.

Lecture 2: Dirac notation and a review of linear algebra Read Sakurai chapter 1, Baym chatper 3

ST5224: Advanced Statistical Theory II

Εξαιρέσεις Εισαγωγή. Εξαιρέσεις. ηµήτρης Λεβεντέας

SCHOOL OF MATHEMATICAL SCIENCES G11LMA Linear Mathematics Examination Solutions

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Advanced Subsidiary Unit 1: Understanding and Written Response

Εισαγωγή στον Προγραμματισμό Python Μάθημα 1: Μεταβλητές, τελεστές, είσοδος/έξοδος προγράμματος, συνθήκη ελέγχου if Νοέμβριος 2014 Χ. Αλεξανδράκη, Γ.

Θέματα Προγραμματισμού Η/Υ

TMA4115 Matematikk 3

Lecture 2. Soundness and completeness of propositional logic

JAVASCRIPT 1. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Π. Αγγελάτος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

Εργαστήριο 9. Styling with Javascript

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Transcript:

Topic 2: Bash Shell Programming * *Ευχαριστίες στους Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη K24: Προγραµµατισµός Συστήµατος

Προγραµµατισµός Bash κελύφους Πιο εύκολο από C κέλυφος Inherits many features from C & Korn shells Most popular shell on Linux systems Linux most popular Unix system Ακολουθία από εντολές # δηλώνει σχόλιο Πρώτη γραµµή Μεταβλητές, συνθήκες οµές ελέγχου Ορίσµατα προγράµµατος Αριθµητικές πράξεις Και άλλα πολλά Κατεβάστε το bash-scripts.tar από τη σελίδα του µαθήµατος K24: Προγραµµατισµός Συστήµατος 2

Παράµετροι Προγράµµατος Πρόγραµµα parameters # all scripts start like this #This is a comment #will give 11 arguments to this program # a b c d e f g h i j k echo Number of input parameters = $# # 11 echo Program Name = $0 #./parameters echo Other Parameters = $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 #Other Parameters = a b c d e f g h i a0 a1 echo Other Parameters = $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} #Other Parameters = a b c d e f g h i j k echo All Arguments = $* #All Arguments = a b c d e f g h i j k Bash script must be executable to run. Use chmod +x shell_script_name../parameters a b c d e f g h i j k Number of input parameters = 11 Program Name =./parameters Other Parameters = a b c d e f g h i a0 a1 Other Parameters = a b c d e f g h i j k All Arguments = a b c d e f g h i j k K24: Προγραµµατισµός Συστήµατος 3

Περί Μεταβλητών - Πρόγραµµα variables # Erwthsh: POTE DEN BAZOUME TO '$' mprosta se mia metablhth? # Apanthsh: Otan ths ana8etoume timh #NEVER USE SPACES BEFORE AND AFTER = IN ASSIGNMENTS a=2334 # Integer - Only digits echo a # a echo $a # 2334 hello="a B C D" echo $hello # A B C D echo "$hello" # A B C D # Ta dipla eisagwgika diathroun ta polla kena echo '$hello' # $hello # Ta mona eisagwgika apenergopoioun thn anafora timhs me $ echo -n "Enter \"b\" " # Grafw hey there read b echo "The value of \"b\" is now $b" # The value of "b" is now hey there echo ${PATH}./variables a 2334 A B C D # SWSTO - Metablhth periballontos PATH $PATH or ${PATH} if easier to read A B C D $hello Enter "b" hey there The value of "b" is now hey there /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/x11:/usr/games K24: Προγραµµατισµός Συστήµατος 4

Αριθµητικές Πράξεις - Πρόγραµµα arithmetics Πολλές επιλογές: a=2334 let b=a+3 # isxyei kai to let b=$a+3 let "c = a+3" let "d = a+ 3 #eite me eite xwris kena (( z=$(($a+3 y=$((a+3)) # Epishs swsto k=`expr $a + 3` # Xrhsh entolhs expr echo $a $b $c $d $k $z $y #2334 2337 2337 2337 2337 2337 2337 Για απλές πράξεις, οι εντολές let και expr. Για δεκαδικούς, ηεντολήbc./arithmetics 2334 2337 2337 2337 2337 2337 2337 K24: Προγραµµατισµός Συστήµατος 5

Εντολή expr - Πρόγραµµα myexpr # PROSOXH: APAITOYNTAI KENA a=`expr 3 + 5`; echo $a # 8 a=`expr 5 % 3`; echo $a # 2 a=`expr 5 / 3`; echo $a # 1 # a=`expr 1 / 0` # Epistrefei sfalma a=`expr 5 \* 3`; echo $a # 15. Me to expr, ston pollaplasiasmo \* a=`expr $a + 5`; echo $a # Idio me let a=a+5 string=enamegalostring echo "String is: ${string}" position=4 length=6 z=`expr substr $string $position $length` #E3agei length xarakthres apo to string. #3ekinaei apo th 8esh position echo "Substring is: $z" # Megalo myexpr 8 2 1 15 20 String is: EnaMegaloString Substring is: Megalo K24: Προγραµµατισµός Συστήµατος 6

Πράξεις δεκαδικών µε bc Πρόγρ. mybc # EPITREPEI ARI8MHTIKES PRA3EIS SE DEKADIKOUS a=100.19 ( bc b=$(echo "scale=3; $a/100" # scale ka8orizei dekadika pshfia echo b = $b # b = 1.001 #perform inequality tests A=0.04 B=0.03 let "comp=`echo $A-$B\>0 bc` echo $comp # 1 Με την echo στέλνουµε ωςόρισµα στη bc: 0.04-0.03>0 και επιστρέφει 0/1. let "comp=`echo $B-$A\>0 bc`" echo $comp # 0./mybc b = 1.001 1 0 K24: Προγραµµατισµός Συστήµατος 7

Τιµήεξόδου Πρόγραµµα exitstatus # To $? epistrefei ton kwdiko e3ou ths teleytaias # entolhs pou ektelesthke echo hello echo $? # 0 : epitygxhmenh ektelesh lsdlsd echo $? # agnwsth entolh # 127 - genikws mh mhdenikh se sfalma echo exit 113 # Prepei na einai 0-255./exitStatus hello 0./exitStatus: line 8: lsdlsd: command not found 127 K24: Προγραµµατισµός Συστήµατος 8

Συνθήκες Στη γενική µορφή σε δύο είδη: [ συνθήκη ελέγχου ] ή test συνθήκη ελέγχου The base for the if construction in bash is: if [expression]; then code if expression is true. fi Example: if [ "foo" = "foo" ]; then echo expression evaluated as true fi Πιο σπάνια και αριθµητικές συνθήκες, συνθήκες (()) K24: Προγραµµατισµός Συστήµατος 9

Αριθµητικές Συνθήκες Πρόγραµµα arithmetictests # Arithmetic tests. # The ((... )) construct evaluates and tests # numerical expressions. # Exit status opposite from [... ] construct! (( 0 )) echo "Exit status of \"(( 0 ))\" is $?." # 1 (( 1 )) echo "Exit status of \"(( 1 ))\" is $?." # 0 (( 5 > 4 )) # true echo "Exit status of \"(( 5 > 4 ))\" is $?." # 0 (( 5 > 9 )) # false echo "Exit status of \"(( 5 > 9 ))\" is $?." # 1 (( 5-5 )) # 0 echo "Exit status of \"(( 5-5 ))\" is $?." # 1 (( 5 / 4 )) # Division o.k. Result > 1. echo "Exit status of \"(( 5 / 4 ))\" is $?." # 0 (( 1 / 2 )) # Division result < 1. Division is rounded off to 0. echo "Exit status of \"(( 1 / 2 ))\" is $?." #1 (( 1 / 0 )) 2>/dev/null # Illegal division by 0. # ^^^^^^^^^^^ echo "Exit status of \"(( 1 / 0 ))\" is $?." # 1 # What effect es the "2>/dev/null" have? # What would happen if it were removed? # Try removing it, then rerunning the script. exit 0 K24: Προγραµµατισµός Συστήµατος 10

Συνθήκες Αρχείων Πρόγραµµα filetests if [ -e $1 ] # exists file then if [ -f $1 ] # is a regular file then echo Regular File fi fi # Omoia, to -d elegxei an prokeitai gia katalogo if [ -r $1 ] # have read rights then echo I can read this file!!! fi # Omoia to -w kai -x ls moreexpr moreexpr*./filetests moreexpr Regular File I can read this file!!! ls -l moreexpr -rwxr-xr-x 1 mema mema 440 Oct 11 09:37 moreexpr* K24: Προγραµµατισµός Συστήµατος 11

Συνθήκες Ακεραίων -eq if [ $a eq $b ] -ne if [ $a ne $b ] -gt if [ $a gt $b ] -ge if [ $a ge $b ] -lt if [ $a lt $b ] -le if [ $a le $b ] Ίσα Άνισα Μεγαλύτερο (( $a > $b )) Μεγαλύτερο ή ίσο (( $a >= $b )) Μικρότερο (( b $ (( $a < Μικρότερο ή ίσο (( $a <= $b )) K24: Προγραµµατισµός Συστήµατος 12

Συνθήκες Strings (πάντα να χρησιµοποιείτε εισαγωγικά) = if [ $a = $b ] == if [ $a == $b ]!= if [ $a!= $b ] < if [ $a \< $b ] > if [ $a \> $b ] -n if [ -n a ] -z if [ -z a ] Ίσα Ίσα ιαφορετικά Μικρότερο αλφαβητικά Μεγαλύτερο αλφαβητικά Όχι null Null (µέγεθος 0) K24: Προγραµµατισµός Συστήµατος 13

Λογικές Συνθήκες! if [! f file ] -a if [ $a a $b ] -o if [ $a o $b ] Λογικό NOT Λογικό AND Λογικό OR K24: Προγραµµατισµός Συστήµατος 14

οµήελέγχουif if <συνθήκη1> then εντολές elif <συνθήκη2> then εντολές else εντολές fi Προφανώς τα τµήµατα elif και else είναι προαιρετικά K24: Προγραµµατισµός Συστήµατος 15

οµήελέγχουcase case $variable in $condition1 ) εντολές. ;; $conditionn ) εντολές. ;; esac K24: Προγραµµατισµός Συστήµατος 16

Παράδειγµα οµής case Πρόγραµµα math Πρόγραµµα που εκτελεί απλές πράξεις µεταξύ 2 ακεραίων. # # Usage: math n1 op n2 # case "$2" in +) echo "Addition requested." echo "$1 + $3 = `expr $1 + $3`" ;; -) echo "Substraction requested." echo "$1 - $3 = `expr $1 - $3`" ;; \*) echo "Multiplication requested." echo "$1 * $3 = `expr $1 \* $3`" ;; /) echo "Division requested." echo "$1 / $3 = `expr $1 / $3`" ;; %) echo "Modulo arithmetic requested." echo "$1 % $3 = `expr $1 % $3`" ;; *) echo "Unknown operation specified." ;; esac./math 34 + 56 Addition requested. 34 + 56 = 90./math 34-23.3 Subtraction requested. Expr: non-numeric argument Γιατί; 34 23.3 =./math 34-23 Unknown operation specified../math 34-23 Substraction requested. 34-23 = 11./math 34 * 2 Unknown operation specified../math 34 \* 2 Multiplication requested. 34 * 2 = 68 Γιατί; K24: Προγραµµατισµός Συστήµατος 17

οµή for Πρόγραµµα forloops for koko in 1 2 3 4 5 echo $koko #Ektypwsh se diaforetikes grammes for koko in "1 2 3 4 5" echo $koko #Ektypwsh se mia grammh NUMS="1 2 3 4 5" for koko in $NUMS echo $koko #Ektypwsh se diaforetikes grammes for koko in `echo $NUMS` echo $koko #Ektypwsh se diaforetikes grammes LIMIT=8 #Diples parentheseis, LIMIT xwris $ for ((koko=1; koko <= LIMIT; koko++)) echo $koko "loop me limit" #Ektypwsh se diaforetikes grammes K24: Προγραµµατισµός Συστήµατος 18

οµή for Πρόγραµµα forloops2 #Xwris lista timwn epe3ergazetai tis parametrous tou programmatos for koko echo -n $koko; echo #how to parse some arguments from $2 until the end for j in ${*:2} echo -n $j; echo #$2 to $4 - start at position 2 and use 3 args for j in ${*:2:3} echo -n $j echo./forloops2 aa bb cc dd ee ff gg aabbccddeeffgg bbccddeeffgg bbccdd K24: Προγραµµατισµός Συστήµατος 19

οµή while Πρόγραµµα whileloops var0=0 LIMIT=10 while [ "$var0" -lt "$LIMIT" ] echo -n "$var0 " var0=`expr $var0 + 1` # var0=$(($var0+1)) also works. # var0=$((var0 + 1)) also works. # let "var0 += 1" also works. echo exit 0./whileLoops 0 1 2 3 4 5 6 7 8 9 K24: Προγραµµατισµός Συστήµατος 20

Παράδειγµα Πρόγραµµα breakcont LIMIT=19 # Upper limit echo echo "Numbers 1 through 20 (but not 3 and 11)." a=0 while [ $a -le "$LIMIT" ] a=$(($a+1)) #Agnohse ta 3, 11 if [ "$a" -eq 3 ] [ "$a" -eq 11 ] then continue; # Move on to next iteration of loop fi echo -n "$a " # Den ekteleitai gia ta 3 and 11. echo a=0 while [ "$a" -le "$LIMIT" ] (( a=$(($a+1 if [ "$a" -gt 2 ] then break; # Skip entire rest of loop. fi echo -n "$a " echo./breakcont Numbers 1 through 20 (but not 3 and 11). 1 2 4 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20 1 2 K24: Προγραµµατισµός Συστήµατος 21

Ηεντολή set -- $myvar Πρόγραµµα setprog echo Input parameters = $# myvar="one two three four five six" #split based on blank chars #assign to input parameters!! set -- $myvar echo Input parameters = $# #Now prints 6 for koko echo $koko./setprog ena dio tria tessera Input parameters = 4 Input parameters = 6 one two three four five six K24: Προγραµµατισµός Συστήµατος 22

Παράδειγµα Πρόγραµµα revstrs Πρόγραµµα που τυπώνει αντίστροφα τις συµβολοσειρές εισόδου του, καθώς και το µήκος τους # Usage: revstrs [string1 [string2...]] # for str strlen=`expr length "$str"` # 8a arxhsoume ektypwsh apo to telos - Prepei na 3eroume mhkos chind=$strlen while test $chind -gt 0 echo -n "`expr substr \"$str\" $chind 1`" chind=`expr $chind - 1` echo -n " --> " echo -n "$strlen" echo " character(s)."./revstrs mitsos kitsos aap fitsos pitsos paaa sostim --> 6 character(s). sostik --> 6 character(s). paa --> 3 character(s). sostif --> 6 character(s). sostip --> 6 character(s). aaap --> 4 character(s). K24: Προγραµµατισµός Συστήµατος 23

Παράδειγµα Πρόγραµµα listregfiles Ονόµατα κανονικών αρχείων εντός ενός καταλόγου OUTFILE=files.lst dirname=${1-`pwd`} # To - dhlwnei default timh # An den dw8ei onoma katalogou apo xrhsth echo "The name of the directory to work in: ${dirname}" echo "Regular files in directory ${dirname}" > $OUTFILE # -type f means regular files for file in "$( find $dirname -type f )" echo "$file" sort >> "$OUTFILE" # ^^^^^^^^^^^^^^^^^^ # Anakateu8ynsh ta3inomhmenou stut cd dirfoo/ ls bla1 bla2 files.lst kk1../listregfiles /home/mema/courses/k24/bash-scripts/dirfoo/ The name of the directory to work in: /home/mema/courses/k24/bash-scripts/dirfoo/ cat files.lst Regular files in directory /home/mema/courses/k24/bash-scripts/dirfoo/ /home/mema/courses/k24/bash-scripts/dirfoo/bla1 /home/mema/courses/k24/bash-scripts/dirfoo/bla2 /home/mema/courses/k24/bash-scripts/dirfoo/files.lst /home/mema/courses/k24/bash-scripts/dirfoo/kk1 K24: Προγραµµατισµός Συστήµατος 24

Παράδειγµα Πρόγραµµα shiftcommand Επεξεργασία ορισµάτων προγράµµατος - Εντολή shift # call with > 5 arguments echo "All args are = $*" for str # prints OK even with change echo "The value of the iterator is: ${str} " var=$1 shift echo "var = $var and args = $*"./shiftcommand ena \ > dio tria tesera pente exi All args are = ena dio tria tesera pente exi The value of the iterator is: ena var = ena and args = dio tria tesera pente exi The value of the iterator is: dio var = dio and args = tria tesera pente exi The value of the iterator is: tria var = tria and args = tesera pente exi The value of the iterator is: tesera var = tesera and args = pente exi The value of the iterator is: pente var = pente and args = exi The value of the iterator is: exi var = exi and args = K24: Προγραµµατισµός Συστήµατος 25

Παράδειγµα Πρόγραµµα factorial Υπολογίστε το παραγοντικό του αριθµού που περνιέται σαν όρισµαστο πρόγραµµα # Usage: factorial number if [ "$#" -ne 1 ] then echo "Just give one numeric argument" exit 1 fi if [ "$1" -lt 0 ] then echo Please give positive number exit 1 fi fact=1 ((++ i for ((i = 1; i <= $1; fact=`expr $fact \* $i` echo $fact./factorial Just give one numeric argument./factorial -2 Please give positive number./factorial 4 24./factorial 14 87178291200./factorial 24 expr: *: Numerical result out of range expr: syntax error expr: syntax error expr: syntax error K24: Προγραµµατισµός Συστήµατος 26

Παράδειγµα Πρόγραµµα dirsize Μέγιστο µέγεθος καταλόγου από αυτούς που δίνονται ως ορίσµατα # Usage: dirsize dirname1... dirnamen # max=0; maxdir=$1; dirs=$*; for dir if [! -d $dir ] then echo "No directory with name $dir" else size=`du -sk $dir cut -f1` echo "Size of dir $dir is $size" if [ $size -ge $max ] then max=$size ; maxdir=$dir fi # if size... fi # if directory echo "$maxdir $max"./dirsize dirfoo ~/ Size of dir dirfoo/ is 8 Size of dir /home/mema/ is 19410624 /home/mema/ 19419624 K24: Προγραµµατισµός Συστήµατος 27

Παράδειγµα Πρόγραµµα printcontents # Loads this script into an array and prints array to stut text=( $(cat "$0") ) echo ${text} echo " "; echo " "; echo ***** ; ((++ i for ((i=0; i <= ${#text[@]} - 1; # ${#text[@]} # gives number of elements in the array # prints on a single line separated by "..." echo -n "${text[$i]}" echo -n "... " echo " "; echo " "; echo ***** ; for i in `cat "${0}"` #each field of the script separated by "..." echo -n "${i}" echo -n "... " echo " " An array is a variable containing multiple values. To initialize/assign elements to an array variable named text: text = (value1 value2 value3 ) ${text[3]} is the value of element #3 in text array ${text} is same as ${text[0]} which is the value of element #0 If index number is @ or *, all members of an array are referenced. i.e., ${text[@]} or ${text[*]} K24: Προγραµµατισµός Συστήµατος 28

Παράδειγµα Πρόγραµµα printcontents./printcontents *****... #... Loads... this... script... into... an... array.... text=(... $(cat... "$0")... )... echo... ${text}... echo... "... ";... echo... "... ";... echo... "*****";... for... ((i=0;... i... <=... ${#text[@]}... -... 1;... i++))...... #... ${#text[@]}... #... gives... number... of... elements... in... the... array... #... prints... on... a... single... line... each... field... separated... by... "..."... echo...... "${text[$i]}"... echo...... "......... "...... echo... "... ";... echo... "... ";... echo... "*****";... for... i... in... `cat... "${0}"`...... #each... field... of... the... script... separated... by... "..."... echo...... "${i}"... echo...... "......... "...... echo... "... ";... echo... "... ";... echo... "*****";... *****... #... Loads... this... script... into... an... array.... text=(... $(cat... "$0")... )... echo... ${text}... echo... "... ";... echo... "... ";... echo... "*****";... for... ((i=0;... i... <=... ${#text[@]}... -... 1;... i++))...... #... ${#text[@]}... #... gives... number... of... elements... in... the... array... #... prints... on... a... single... line... each... field... separated... by... "..."... echo...... "${text[$i]}"... echo...... "......... "...... ech... "... ";... echo... "... ";... echo... "*****";... for... i... in... `cat... "${0}"`...... #each... field... of... the... script... separated... by... "..."... echo...... "${i}"... echo...... "......... "...... echo... "... ";... echo... "... ";... echo... "*****";... ***** K24: Προγραµµατισµός Συστήµατος 29

Παράδειγµα Πρόγραµµα printcontents2 ιάβασµααρχείουγραµµή-γραµµή exec < "$0" #Take input from this file while read line echo $line Default value of IFS is <space><tab><newline> With change, shell ignores lines with just spaces/tabs as it prints #IFS is an internal variable specifying #how bash separates fields, word boundaries #ALWAYS SAVE TO TEMP VARIABLE AND #RESET AFTERWARDS OLDIFS="$IFS"; echo "--Old IFS value:" "$IFS" IFS=$'\n' #IFS= also works echo "--New IFS value:" "$IFS" for line in `cat "$0"` echo "$line" IFS="$OLDIFS" exit 0 K24: Προγραµµατισµός Συστήµατος 30

Παράδειγµα Πρόγραµµα printcontents2 ad@melbourne:~/k24/bash-scripts/scripts$./printcontents2 exec < "$0" #Take input from this file while read line echo $line #IFS is an internal variable specifying #how bash separates fields, word boundaries #ALWAYS SAVE TO TEMP VARIABLE AND #RESET AFTERWARDS OLDIFS="$IFS"; echo "--Old IFS value:" "$IFS" IFS=$'n' #IFS= also works echo "--New IFS value:" "$IFS" for line in `cat "$0"` echo "$line" IFS="$OLDIFS" exit 0 --Old IFS value: --New IFS value: K24: Προγραµµατισµός Συστήµατος 31

Παράδειγµα Πρόγραµµα printcontents2 exec < "$0" #Take input from this file while read line echo $line #IFS is an internal variable specifying #how bash separates fields, word boundaries #ALWAYS SAVE TO TEMP VARIABLE AND #RESET AFTERWARDS OLDIFS="$IFS"; echo "--Old IFS value:" "$IFS" IFS=$'\n' #IFS= also works echo "--New IFS value:" "$IFS" for line in `cat "$0"` echo "$line" IFS="$OLDIFS" exit 0 K24: Προγραµµατισµός Συστήµατος 32

Παράδειγµα Πρόγραµµα listandcopy Εύρεση *.h αρχείων σε κατάλογο. Αποθήκευση 3 πρώτων γραµµών τους σε αρχείο myout #!/bin/sh #search for.h files in a specific directory #For each file in this dir, list first 3 lines in the file #into the file "myout" FILE_LIST=`ls /usr/include/c++/4.2/gnu/java/lang/*.h` touch myout; rm myout; touch myout; for file in ${FILE_LIST} echo FILE = ${file} head -3 "${file}" >> myout K24: Προγραµµατισµός Συστήµατος 33

Παράδειγµα Πρόγραµµα listandcopy Εύρεση *.h αρχείων σε κατάλογο. Αποθήκευση 3 πρώτων γραµµών τους σε αρχείο myout./listandcopy FILE = /usr/include/gnutls/compat4.h FILE = /usr/include/gnutls/compat8.h FILE = /usr/include/gnutls/extra.h FILE = /usr/include/gnutls/gnutls.h FILE = /usr/include/gnutls/openssl.h FILE = /usr/include/gnutls/x509.h cat myout /* defines for compatibility with older versions. */ #ifndef GNUTLS_COMPAT8_H # define GNUTLS_COMPAT8_H /* * Copyright (C) 2002 Nikos Mavroyanopoulos * /* * Copyright (C) 2000,2001,2002,2003 Nikos Mavroyanopoulos * /* * Copyright (c) 2002 Andrew McDonald <andrew@mcnald.org.uk> * /* * Copyright (C) 2003 Nikos Mavroyanopoulos * K24: Προγραµµατισµός Συστήµατος 34

Παράδειγµα Πρόγραµµα countword ιάβασµα αρχείου. Αφαίρεση πολλαπλών συνεχόµενων λέξεων. Εκτύπωση κάθε λέξης στη µορφή λέξη/# συνεχόµενες_εµφανίσεις prev=""; cons=1; for str in `cat ${1}` if [ "${str}"!= "$prev" ] then if [! -z $prev ] then echo "${prev}/${cons} " fi prev=${str} cons=1 else let "cons = cons + 1" fi if [! -z prev ] then echo "${prev}/${cons}" fi K24: Προγραµµατισµός Συστήµατος 35

Παράδειγµα Πρόγραµµα countword more test-file this is is a test file another example example example of a test test test test file file./countword test-file this/1 is/2 a/1 test/1 file/1 another/1 example/3 of/1 a/1 test/4 file/2 K24: Προγραµµατισµός Συστήµατος 36