You are on page 1of 62

ΕΠΙΣΤΗΜΗ Η/Υ

(Μέρος 2ο)

Νικόλαος Παπαδάκης
Αντώνιος Λίτκε
1o Έτος
Εαρινό εξάμηνο
2017-2018

np@sse.gr, alitke@sse.gr

Στρατιωτική Σχολή Ευελπίδων


Bash βασικές έννοιες

2
Βασικά, Προγραμματισμος Shell

 Ένα σενάριο είναι ένα αρχείο που περιέχει 
εντολές κελύφους
 δομή δεδομένων: μεταβλητές
 δομή ελέγχου: ακολουθία, απόφαση, βρόχος
 Shebang γραμμή για σενάριο bash shell:
#! /bin/bash
#! /bin/sh
 Τρέχουμε με:

κάνετε εκτελέσιμο: % chmod +x script


επικαλούμαστε μέσω:   % ./onomaScript ή full path
καιόνομα scipt: /home/auser/myscript

Στρατιωτική Σχολή Ευελπίδων


Tο Shell


Δημιουργία script:

Στρατιωτική Σχολή Ευελπίδων 4


Βασικά, Προγραμματισμος Shell

 Εισαγωγή
 Προτροπές προς τον χρήστη
 παράμετροι της γραμμής εντολών
 Απόφαση
 If­then­else
 case
 Επανάληψη
 do­while, repeat­until
 for
 select
 Συναρτήσεις (functions)

Στρατιωτική Σχολή Ευελπίδων


Ανώνυμες είσοδοι (παράμετροι) shell


Είναι παράμετροι (είσοδοι) που δίδονται στο πρόγραμμα (script)
κατά τη επίκλησησης του (πριν εκτελεστεί), πχ:

./myscript 15 no (οι δυο παράμετροι είναι το 15 και το no)

/home/auser/folder1/calculator add 44 55 (τρεις παράμετροι σε αυτή την
περίπτωση)

Επειδή δεν σίνεται όνομα σε αυτές τις παραμέτρους εισόδου το
bash τις ονομάζει με ένα δικό του τρόπο.

Η επίκληση της τιμής κάθε παραμέτρου γίνεται με χρήση του
ειδικού χαρακτήρα “$”

Στρατιωτική Σχολή Ευελπίδων


Ανώνυμες είσοδοι (παράμετροι) shell

παράμετρος Εννοια

$ το 0 Όνομα τρέχοντος σενάριου φλοιού


$ 1- $ 9 Παράμετροι θέσης 1 έως 9
$# Ο αριθμός των παραμέτρων θέσης
$* Όλες οι παράμετροι θέσης, «$ *» είναι ένα string
$@ Όλες οι παράμετροι θέσης, «$ @» είναι ένα σύνολο
συμβολοσειρών
$; Επιστρέφει κατάσταση της πιο πρόσφατα εκτελεσθήσας
εντολής
$$ Το id της τρέχουσας διαδικασίας

Στρατιωτική Σχολή Ευελπίδων


Είσοδος Χρήστη (επώνυμες είσοδοι-
παράμετροι)

 Το κέλυφος μπορεί να ζητά είσοδο από το χρήστη 
ονομάζοντας τις παραμέτρους αυτές (αναθέτοντάς 
τις σε μεταβλητές που έχει καθορίσει ο 
προγραμματιστής)
Σύνταξη (χωρίς εμφάινιση κειμένου και με εμφάνιση):
read varname [περισσότερα VARs]
ή
read -p «προτροπή» varname [περισσότερα VARs]

 Οι λέξεις που έχουν εισαχθεί από το χρήστη 
ανατίθενται στο varname και VARs
 τελευταία μεταβλητή παίρνει υπόλοιπο της γραμμής 
εισόδου

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

% ./myScript tim bill ann fred


$1 $2 $3 $4
Η εντολή «set»
% echo $*
μπορεί να
tim bill ann fred χρησιμοποιηθεί για
% echo $# να αναθέσετε τιμές
4 σε παραμέτρους
% echo $1 θέσης
tim
% echo $3 $4
ann fred

Στρατιωτική Σχολή Ευελπίδων


Bash, δομές ελέγχου

 if­then­else
 case

 loops

– for
– while
– until
– select

Στρατιωτική Σχολή Ευελπίδων


Εντολή IF

if command
then
statements
fi

 Οι δηλώσεις εκτελούνται μόνο εάν το “command” 
είναι επιτυχές, δηλαδή επιστρέψει “0”

Στρατιωτική Σχολή Ευελπίδων


Η απλή δήλωση IF

if [ condition ]; then
statements
fi

 εκτελεί τις δηλώσεις μόνο αν condition είναι 
αληθής

Στρατιωτική Σχολή Ευελπίδων


Η IF-THEN-ELSE δήλωση

if [ condition ]; then
statements-1
else
statements-2
fi

 εκτελεί τις statements­1 αν condition είναι 
αληθές
 εκτελεί τις  statements­2 αν condition είναι 
ψευδές

Στρατιωτική Σχολή Ευελπίδων


Η εντολή IF…

if [ condition ]; then
statements
elif [ condition ]; then
statement
else
statements
fi
 Η λέξη elif σημαίνει «else if» 

 Είναι μέρος της εντολής if και δεν μπορεί να 
χρησιμοποιηθεί από μόνη της

Στρατιωτική Σχολή Ευελπίδων


Σχεσιακοί Τελεστές
Έννοια – είδος σύγκρισης Αριθμητικά Συμβολοσειρά

Μεγαλύτερος από -gt


Μεγαλύτερο ή ίσο -ge
Λιγότερο από -lt
Μικρότερο ή ίσο -le
Ισος -eg = Ή ==
όχι ίσο -ne !=
str1 είναι μικρότερη από str2 str1 <str2
str1 είναι μεγαλύτερη str2 str1> str2
μήκος συμβολοσειράς είναι -n str
μεγαλύτερo από το μηδέν
μήκος συμβολοσειράς είναι μηδέν -z str
Λογικές εκφράσεις

! not

To and, or
&& and πρέπει να περικλείεται εντός
|| or
[[ ]]

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα: Χρήση του τελεστή “!”

#!/bin/bash

read -p "Enter years of work: " Years


if [ ! "$Years" -lt 40 ]; then
echo "You can retire now."
else
echo "You need 40+ years to retire"
fi

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα: Χρήση του τελεστή &&

#!/bin/bash

Bonus=500
read -p "Enter Status: " Status
read -p "Enter Shift: " Shift
if [[ "$Status" = "H" && "$Shift" = 3 ]]
then
echo "shift $Shift gets \$$Bonus bonus"
else
echo "only hourly workers in"
echo "shift 3 get a bonus"
fi

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα: Χρήση του τελεστή ||

#!/bin/bash

read -p "Enter calls handled:" CHandle


read -p "Enter calls closed: " CClose
if [[ "$CHandle" -gt 150 || "$CClose" -gt 50 ]]
then
echo "You are entitled to a bonus"
else
echo "You get a bonus if the calls"
echo "handled exceeds 150 or"
echo "calls closed exceeds 50"
fi

Στρατιωτική Σχολή Ευελπίδων


Εντολή Δοκιμής

Σύνταξη: 
test expression
[ expression ]
 αξιολογεί την «έκφραση» και επιστρέφει true ή 
false

Παράδειγμα:
if test –w "$1"
then
echo "file $1 is write-able"
fi

Στρατιωτική Σχολή Ευελπίδων


Δοκιμές αρχείων (condition)

  Εννοια
­d file       Αληθές αν «αρχείο» είναι ένας κατάλογος
­f file       Αληθές αν «αρχείο» είναι ένα κανονικό αρχείο
­r file       Αληθές αν «αρχείο» είναι αναγνώσιμο
­w file       Αληθές αν «αρχείο» είναι εγγράψιμο
­x file       Αληθές αν «αρχείο» είναι εκτελέσιμο
­s file       Αληθές αν το μήκος του «φακέλου» είναι μη μηδενικό

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα: Δοκιμές σε αρχεία (FILE)

#!/bin/bash
echo "Enter a filename: "
read filename
if [ ! –r "$filename" ]
then
echo "File is not read-able"
exit 1
fi

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα: Δοκιμές σε αρχεία (FILE)

#! /bin/bash

if [ $# -lt 1 ]; then
echo "Usage: filetest filename"
exit 1
fi
if [[ ! -f "$1" || ! -r "$1" || ! -w "$1" ]]
then
echo "File $1 is not accessible"
exit 1
fi

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα: IF ...

# Οι ακόλουθες τρεις if-conditions παράγουν το ίδιο αποτέλεσμα

* DOUBLE SQUARE BRACKETS


read -p "Do you want to continue?" reply
if [[ $reply = "y" ]]; then
echo "You entered " $reply
fi

* SINGLE SQUARE BRACKETS


read -p "Do you want to continue?" reply
if [ $reply = "y" ]; then
echo "You entered " $reply
fi

* "TEST" COMMAND
read -p "Do you want to continue?" reply
if test $reply = "y"; then
echo "You entered " $reply
fi

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα: IF..ELIF ...

#!/bin/bash

read -p "Enter Income Amount: " Income


read -p "Enter Expenses Amount: " Expense

let Net=$Income-$Expense

if [ "$Net" -eq "0" ]; then


echo "Income and Expenses are equal -
breakeven."
elif [ "$Net" -gt "0" ]; then
echo "Profit of: " $Net
else
echo "Loss of: " $Net
fi

Στρατιωτική Σχολή Ευελπίδων


Η Δήλωση Περίπτωσης (case)

Χρησιμοποιούμε τη δήλωση περίπτωσης όταν 
έχουμε πολλαπλές επιλογές
Σύνταξη:
case word in
pattern1) command-list1
;;
pattern2) command-list2
;;
patternN) command-listN
;;
esac

Στρατιωτική Σχολή Ευελπίδων


Η εντολή case

 Mπορεί επίσης να περιέχει:
*
;
[...]
[:class:]
 πολλαπλά πρότυπα μπορούν να αναφέρονται 
μέσω:
|

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 1

#!/bin/bash
echo "Enter Y to see all files including hidden files"
echo "Enter N to see all non-hidden files"
echo "Enter q to quit"

read -p "Enter your choice: " reply

case $reply in
Y|YES) echo "Displaying all (really…) files"
ls -a ;;
N|NO) echo "Display all non-hidden files..."
ls ;;
Q) exit 0 ;;

*) echo "Invalid choice!"; exit 1 ;;


esac

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 2

#!/bin/bash
ChildRate=3
AdultRate=10
SeniorRate=7
read -p "Enter your age: " age
case $age in
[1-9]|[1][0-2]) # child, if age 12 and younger
echo "your rate is" '$'"$ChildRate.00" ;;
# adult, if age is between 13 and 59 inclusive
[1][3-9]|[2-5][0-9])
echo "your rate is" '$'"$AdultRate.00" ;;
[6-9][0-9]) # senior, if age is 60+
echo "your rate is" '$'"$SeniorRate.00" ;;
esac

Στρατιωτική Σχολή Ευελπίδων


Βρόχοι, επαναλήψεις

Στρατιωτική Σχολή Ευελπίδων


Ο βρόχος WHILE LOOP

 Σκοπός:
Για να εκτελέσετε δέσμη εντολών για όσο 
διάστημα η “έκφραση (expression) ” είναι 
αληθής

Σύνταξη:
while [ expression ]
do
command-list
done

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]
do
echo “The counter is” $COUNTER
let COUNTER=$COUNTER+1
done

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα ανάγνωσης λίστα από αρχείο

#!/bin/bash
count=1;
while read F; do
echo $count $F
let count+=1
done < ./world_countries.csv

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 2

#!/bin/bash

Cont="Y"
while [ $Cont = "Y" ]; do
ps -A
read -p "want to continue? (Y/N)" reply
Cont=`echo $reply | tr [:lower:] [:upper:]`
done
echo "done"

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 3

#!/bin/bash
# copies files from home- into the webserver- directory
# A new directory is created every hour

PICSDIR=/home/carol/pics
WEBDIR=/var/www/carol/webcam
while true; do
DATE=`date +%Y%m%d`
HOUR=`date +%H`
mkdir $WEBDIR/"$DATE"
while [ $HOUR -ne "00" ]; do
DESTDIR=$WEBDIR/"$DATE"/"$HOUR"
mkdir "$DESTDIR"
mv $PICSDIR/*.jpg "$DESTDIR"/
sleep 3600
HOUR=`date +%H`
done
done

Στρατιωτική Σχολή Ευελπίδων


Η εντολή UNTIL

 Σκοπός:
Για να εκτελέσετε εντολές για όσο διάστημα το 
«expression» είναι ψευδές

Σύνταξη:
until [ expression ]
do
command-list
done

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

#!/bin/bash

COUNTER=20
until [ $COUNTER -lt 10 ]
do
echo $COUNTER
let COUNTER-=1
done

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 2

#!/bin/bash

Stop="N"
until [ $Stop = "Y" ]; do
ps -A
read -p "want to stop? (Y/N)" reply
Stop=`echo $reply | tr [:lower:] [:upper:]`
done
echo "done"

Στρατιωτική Σχολή Ευελπίδων


Ο βρόχος FOR

 Σκοπός: 
Nα εκτελέσει εντολές συγκεκριμένο αριθμό 
φορών

Σύνταξη:
for variable in argument-list
do
commands
done

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 1

#!/bin/bash

for i in 7 9 2 3 4 5
do
echo $i
done

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 2

#!/bin/bash
# Υπολογίζει τη μέση εβδομαδιαία
θερμοκρασία

for num in 1 2 3 4 5 6 7
do
read -p "Enter temp for day $num: " Temp
let TempTotal=$TempTotal+$Temp
done

let AvgTemp=$TempTotal/7
echo "Average temperature: " $AvgTemp

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα 3

#!/bin/bash
# download numbered pages from a site

for i in $(seq 1 400)

do echo -n "downloading ${i} "


wget -pHEKk http://example.com/page${i}.htm

done

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

 απλούστερη μορφή θα επαναλάβει πάνω από 
όλα τις εντολές της γραμμής εντολών:

#! /bin/bash
for parm
do
echo $parm
done

Στρατιωτική Σχολή Ευελπίδων


Η εντολή select

 Δημιουργεί απλό μενού από τη λίστα λέξεων
 Επιτρέπει στο χρήστη να εισάγει έναν αριθμό 
αντί για μια λέξη
 Ο χρήστης εισάγει τον αριθμό ακολουθίας που 
αντιστοιχεί στη λέξη
Σύνταξη:
select WORD in LIST
do
RESPECTIVE-COMMANDS
done
 Ισχύει έως τέλος εισαγωγής, δηλαδή ^d (ή ^c)

Στρατιωτική Σχολή Ευελπίδων


SELECT Παράδειγμα

#! /bin/bash
select var in alpha beta gamma
do
echo $var 1) alpha
done 2) beta
3) gamma
 Εκτυπώνει:
#; 2
beta
#; 4
#; 1
alpha

Στρατιωτική Σχολή Ευελπίδων


SELECT Συνέχεια

 PS3 επιλογή υπο­γραμμής
 $REPLY η απάντηση που εισάγει ο χρήστης (ο 
αριθμός) Output:
select ...
#! /bin/bash 1) alpha
PS3="select entry or ^D: " 2) beta
? 2
select var in alpha beta
2 = beta
do ? 1
echo "$REPLY = $var" 1 = alpha
done

Στρατιωτική Σχολή Ευελπίδων


BREAK και CONTINUE

 Διακόπτης για, while ή until βρόχο
 Η εντολή break 
 μεταφέρει τον έλεγχο στην δήλωση μετά τη δήλωση 
done
 τερματίσει εκτέλεση του βρόχου
 Η  δήλωση continue
 μεταφέρει τον έλεγχο στην δήλωση TO
 συνεχίζει την εκτέλεση του βρόχου

Στρατιωτική Σχολή Ευελπίδων


Η εντολή break

while [ condition ]
do
cmd-1
break Αυτή η επανάληψη
cmd-n έχει ολοκληρωθεί
δεν θα υπάρξουν
done
άλλες επαναλήψεις
echo "done"

Στρατιωτική Σχολή Ευελπίδων


Η ΕΝΤΟΛΗ continue

while [ condition ]
do
cmd-1 Αυτή η επανάληψη
continue έχει ολοκληρωθεί.
cmd-n Προχώρα με την
done επόμενη επανάληψη
echo "done"

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

for index in 1 2 3 4 5 6 7 8 9 10
do
if [ $index –le 3 ]; then
echo "continue"
continue
fi
echo $index
if [ $index –ge 8 ]; then
echo "break"
break
fi
done

Στρατιωτική Σχολή Ευελπίδων


SHELL functions

 Μια συνάρτηση κέλυφος είναι παρόμοια με ένα 
σενάριο φλοιού
 αποθηκεύει μια σειρά από εντολές για μετέπειτα 
εκτέλεση
 Το κέλυφος αποθηκεύει τις functions στη μνήμη
 φλοιός εκτελεί μια function στο ίδιο κέλυφος που 
την κάλεσε
 Που μπορούμε να τις καθορίσουμε
 Σε .profile
 Σε ένα σενάριό σας
 Ή στη γραμμή εντολών

Στρατιωτική Σχολή Ευελπίδων


SHELL function

 Η function πρέπει να οριστεί πριν να αναφερθεί
 συνήθως τοποθετούνται στην αρχή του 

\
σεναρίου

Σύνταξη:

function-name () {
statements
}

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

#!/bin/bash

funky () {
# This is a simple function
echo "This is a funky function."
echo "Now exiting funky function."
}

# Δήλωση πρέπει να προηγείται της


κλήσης:

funky

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

#!/bin/bash
fun () { # Μια κάπως πιο σύνθετη λειτουργία.
JUST_A_SECOND=1
let i=0
REPEATS=30
echo "Και τώρα η διασκέδαση αρχίζει
πραγματικά."
while [ $i -lt $REPEATS ]
do
echo "-------FUNCTIONS are fun-------->"
sleep $JUST_A_SECOND
let i+=1
done
}
fun

Στρατιωτική Σχολή Ευελπίδων


Παράμετροι

 Δεν χρειάζεται να δηλώνονται
 Παράμετροι που παρέχονται μέσω κλήσης 
συνάρτησης είναι προσβάσιμα διαμέσου $1, $2, 
$3, ...

$#  επιστρέφει τον αριθμό των παραμέτρων
$0  περιέχει το όνομα του σεναρίου 
(Όχι το όνομα της συνάρτησης)

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

#! /bin/sh
testfile() {
if [ $# -gt 0 ]; then
if [[ -f $1 && -r $1 ]]; then
echo $1 is a readable file
else
echo $1 is not a readable file
fi
fi
}

testfile .
testfile funtest

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

#! /bin/bash
checkfile() {
for file
do
if [ -f "$file" ]; then
echo "$file is a file"
else
if [ -d "$file" ]; then
echo "$file is a directory"
fi
fi
done
}
checkfile . funtest

Στρατιωτική Σχολή Ευελπίδων


Οι τοπικές μεταβλητές και functions

 Οι μεταβλητές που ορίζονται μέσα στη function 
είναι καθολικές,
δηλαδή οι τιμές τους είναι γνωστές σε όλο το 
πρόγραμμα στο κέλυφος

 λέξη­κλειδί «local» μέσα σε ένα ορισμό 
συνάρτησης κάνει τη μεταβλητή «τοπική» σε 
αυτή την function

Στρατιωτική Σχολή Ευελπίδων


Παράδειγμα

#! /bin/bash

global="pretty good variable"

foo () {
local inside="not so good variable"
echo $global
echo $inside
global="better variable"
}

echo $global
foo
echo $global
echo $inside

Στρατιωτική Σχολή Ευελπίδων


Χειρισμός σημάτων

 Unix επιτρέπει να στείλετε μηνύματα σε κάθε 
διαδικασία

 ­1 = hangup kill -HUP 1234


 ­2 = διακόπτει με ^C kill -2 1235

 no argument = terminate kill 1235

 ­9 = στερματίζει kill -9 1236


 ­9 δεν μπορεί να μπλοκαριστεί

 κατάλογο των διαδικασιών σας με
ps -u userid

Στρατιωτική Σχολή Ευελπίδων


Σήματα του LINUX

% kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

 To ^c είναι 2 ­ SIGINT

Στρατιωτική Σχολή Ευελπίδων


Άλλες εντολές


Pdftk

Dot

Convert

Στρατιωτική Σχολή Ευελπίδων

You might also like