Upload
sce
View
8
Download
0
Embed Size (px)
Citation preview
File name expansions
דוגמאות*.c
cכל הקבצים עם סיומת
*AD*
ADקבצים שבשמותיהם צירוף האותיות
> gcc -c *.c
c.תקמפל את כל הקבצים עם הסיומת
<rm prog1.?
ולאחר .prog1-תמחק את כל הקבצים שמתחילים ב
מכן יש בדיוק תו אחד
Chapter 5 - Windows Processes 2 Shayke Billu PhD
File name expansions
דוגמאותfile[13]
ושאחרי file -מציין את כל הקבצים ששמותיהם מתחילים ב
.3או 1אותיות אלו מופיע או
file[A-Za-z13]
ושאחרי file -מציין את כל הקבצים ששמותיהם מתחילים ב
ב האנגלי או אחת "א-אותיות אלו מופיעה אחת מאותיות ה
.3או 1מהספרות
Chapter 5 - Windows Processes 3 Shayke Billu PhD
משתניםset <variable> = <value>
בשםמגדירה משתנהvariable וקובעת את ערכו ל- value.
value יכול להיות:
של מחרוזות ומספרים מחרוזת או רשימה , שלמיםמספרים
אין צורך להכריז על משתניcshell מוגדרים ברגע כיוון שהמשתנים . שמציבים להם ערכים
בכדי לקבל את ערכו של המשתנה יש להשתמש ב- $
$<variable> מחזיר את ערך המשתנהvariable
> set v = abc
> echo $v
abc
> set v = 123
> echo $v
123
Chapter 5 - Windows Processes 4 Shayke Billu PhD
> @ i = 3
> echo $i
3
> @ i = $i + 1
> echo $i
4
> @ i ++
> echo $i
5
> set v = 12
> @ v = $v + $i
> echo $v
17
משתנים מספריים ב- cshell ניתן להשתמש במשתנים המכילים מספרים שלמים ולבצע
.פשוטותעליהם פעולות חשבון
בתחילת פקודה מסמן לחשב את הביטוי המספרי בפקודה' @'הסימן .
ורוצים לאתחל את ערכו של משתנה במידה
. setבפקודה להיעזר ניתן לקבוע
בכדי לבצע פעולות חשבוניות אולם
@ -חייבים להשתמש ב
לבשימו:
ולפני הפקודה' @'יש לשים רווח אחרי
האסוציאטיביות אינה סטנדרטית .
5הינו 2-3+4טוי יערך הב: לדוגמא-
לצפותכפי שניתן היה 3ולא
Chapter 5 - Windows Processes 5 Shayke Billu PhD
מחרוזות ב- cshell ,אולם אם רוצים , כל רצף של תווים נקרא מחרוזת
כלומר )לעבוד עם מחרוזות המכילות יותר ממילה אחת
כך ( ) " יש לתחום אותן בין גרשיים ( מכילות גם רווחים
.שכל המשפט יהווה מחרוזת שהיא מילה אחת
> set a = "abc def ghe"
> echo $a
abc def ghe
מילת זו עדיין גם רווחים שימו לב כי למרות שהמילה מכילה
.מחרוזת אחת המורכבת משלוש תת מחרוזות
לתת להן מספור ניצטרךעל מנת לייצג כל תת מחרוזת
Chapter 5 - Windows Processes 6 Shayke Billu PhD
רשימות
עבור משתנהa המכיל רשימה של ערכים מציין הביטויa[i] את aברשימת הערכים i-האיבר ה
בcshell- מספור האיברים ברשימהa
(.כמו במערכים -0ולא מ) -1ממתחיל
> set a = (123 def ghi)
> echo $a
123 def ghi
> echo $a[2]
def
> set a[3] = ww
> echo $a
123 def ww
Chapter 5 - Windows Processes 7 Shayke Billu PhD
רשימות
cshell רשימה בתוך )לא תומך ברשימות מקוננות
: ולכן על הפקודה( רשימה
> set a[3] = (12 abc 34)
שגיאהנקבל:
set: syntax error
Chapter 5 - Windows Processes 8 Shayke Billu PhD
פעולות על רשימות
: ערכיםהמכיל רשימה של aהמשתנה עבור
הביטוי${#a} מציין את מספר האיברים ברשימה
הביטויa[m-n] מהאיבר ה, הרשימה-מציין את תת- m עד
n -לאיבר ה
הביטויa[-n] מהאיבר הראשון עד , הרשימה-מציין את תת
-nלאיבר ה
הביטויa[m-] מהאיבר ה, הרשימה-מציין את תת-m עד לסוף
הרשימה
הביטויa[*] מציין את הקבוצה המורכבת מכל איברי הרשימה
Chapter 5 - Windows Processes 9 Shayke Billu PhD
דוגמאות -רשימות
> set a = (aa bb cc dd ee)
> echo $#a
5
>echo $a[3-]
cc dd ee
>echo $a[2-4]
bb cc dd
> echo $a[-3]
aa bb cc
Chapter 5 - Windows Processes 10 Shayke Billu PhD
דוגמאות -רשימות
מזיזה את כל shift aהפעולה , aעבור רשימת ערכים
איברי הרשימה מקום אחד שמאלה ומבטלת את האיבר
.הראשון ומסירה אותו מרשימת הערכים
> set v = ( go to the beach )
> echo $v[1]
go
> shift v
> echo $v[1]
to
> echo $v
to the beach
Chapter 5 - Windows Processes 11 Shayke Billu PhD
נקודות מתקדמות בנוגע למשתנים
ניתן להתייחס לכל משתנה המכיל מחרוזת או מספר . בת איבר אחדכרשימה
הפעולות הבאות הינן חוקיות:
> set a = “abc def ghi”
> echo $a[1]
abc def ghe
שגיאההפקודה הבאה תגרום , אבל:
> echo $a[2]
a: Subscript out of range.
Chapter 5 - Windows Processes 12 Shayke Billu PhD
נקודות מתקדמות בנוגע למשתנים
י "לפרק מחרוזת לרשימת המילים המופיעות בה עניתן . השמת המחרוזת בתוך סוגריים
הדרך הסטנדרטית להפוך מחרוזת שבה רווחים רבים זו רווח אחדאך ורק בין המילים מופיע שבה לרשימה
>set b = ($a)
>echo $b
abc def ghe
>echo $b[2]
def
Chapter 5 - Windows Processes 13 Shayke Billu PhD
נקודות מתקדמות בנוגע למשתנים
להדגיש מהו מסולסלים כדי להשתמש בסוגריים ניתן . שמו של משתנה
שימושי במיוחד כאשר רוצים להוסיף סיומת הדבר :לערכו של משתנה
> set b = 123
> set a = ${b}4
> echo $a
1234
Chapter 5 - Windows Processes 14 Shayke Billu PhD
Command substitution
החלפת פקודה ב- cshell בתוך , כלומר, אפשר להשתמש בפקודות מקוננות
להשתמש בתוצאה של פקודה אחרת ניתן מסויימתפקודה
הכתובה בתוכה
על מנת לעשות זאת יש להקיף את הפקודה המקוננת
או backquotesהמכונים באנגלית)בגרשיים הפוכים
backticks) , ואז מובטח כי היא תתבצע לפני ביצוע שאר
הפקודההשורה ותוחלף בערך המוחזר מביצוע
Chapter 5 - Windows Processes 15 Shayke Billu PhD
> echo you have `ls | wc -l` files in `pwd`
you have 43 files in /home/rotics
פקודה )קודם שיערוך של הפקודות הפנימיות מתבצע
הסופרת את מספר השורות המתקבלות כתוצאה מהרצת
ופקודה המחזירה את השם של המדריך הנוכחי lsהפקודה
/home/rotics ) ולאחר מכן תוצאותיהן משובצות בפקודה
echoפקודת -החיצונית
Chapter 5 - Windows Processes 16 Shayke Billu PhD
Command substitution
החלפת פקודה
Command substitution דוגמא > cat list
file1 file2 file3
> cat file1
you are in file1
Buy a Selkom phone
> cat file2
you are in file2
buy Motorola Pelephone
> cat file3
you are in file3
Im Grimberg Matzliah Ata Marviach
> cat `cat list`
you are in file1
Buy a Selkom phone
you are in file2
buy Motorola Pelephone
you are in file3
Im Grimberg Mazliah Ata Marviach
Chapter 5 - Windows Processes 17 Shayke Billu PhD
CSHELL -כיצד עובד ה
ניתן לראות את ה-C-Shell כ-Macro Processor : העובד בלולאה, מתוחכם
הצגתprompt
קבלת פקודה
עיבודה וביצועה, הפקודהניתוח
תוכנית ה , לצורך ביצוע עבודתוC-Shell מנהלת מספר :מבני נתונים
רשימת הפקודות האחרונות שבוצעו.
רשימת המשתנים
רשימת הalias.
Chapter 5 - Windows Processes 18 Shayke Billu PhD
: shell-Cעבודת ה סדר
הפקודה מופרדת למילים: הפקודהניתוח .
רווח והתווים-Tab כסימנים אשר משמשים
מפרידים בין כל אחת מהמילים
ביצוע החלפות לקבלת פקודה פשוטה: עיבוד הפקודה .
וכדמשתנים , החלפות היסטוריהמבוצעות'...
הפקודה הפשוטה שהתקבלה : ביצוע הפקודה
.מיידיתמבוצעת
Chapter 5 - Windows Processes 19 Shayke Billu PhD
CSHELL -כיצד עובד ה
הפקודה עיבוד
)pipeline redirection -ו ללא )
י "ע)בפקודות קודמות שימוש והפקודה מכילה במידה
History Substitutionמתבצע !( השימוש בסימן
של ההיסטוריה הפקודה שהתקבלה נשמרת ברשימת שורת . הפקודות שבוצעו
לאחר )שורת הפקודה ההיסטוריה ובוצעו החלפות במידה מודפסת למסך ( ההחלפות
> echo AAA
AAA
> echo !!
echo echo AAA
echo AAA
Chapter 5 - Windows Processes 20 Shayke Billu PhD
המילה הראשונה בפקודה הנה שם של אםalias מתבצע
alias substitution.
ביצועvariable substitution.
ביצועFile name substitution.
ביצועcommand substitution .
ה- back-quoted string (`... `) מוחלפת בתוצאת
הפקודה
Chapter 5 - Windows Processes 21 Shayke Billu PhD
הפקודה עיבוד
)pipeline redirection -ו ללא )
ביצוע הפקודהישנן שתי . לאחר בצוע כל ההחלפות הפקודה מבוצעת
:סוגי פקודות
פקודות חיצוניות
ניתן להריץ כל תוכנית הקיימת במערכת .
ה-Shell יפעיל את התוכנית ויעביר לה את (במידה וניתנו לה)הארגומנטים
בכדי למצוא את התוכנית ניתן: לתת את מיקומה המדויק(full path name).
והלתת רק את שם התוכנית- C-Shell יחפשה.
יתבצע בכל המדריכים המופיעים בכל מקרה החיפוש .pathברשימה של המשתנה
Chapter 5 - Windows Processes 22 Shayke Billu PhD
פנימיותפקודות
הלתוכנית הניתנות פקודות- C-shell עצמה
.אותןשמפרש Shell -הי "ומבוצעות ע
סטוריה יההניהול(history)
ניהול רשימת המשתנים(set/unset/shift)
ניהול רשימת הalias (alias/un-alias)
השינוי- working directory (cd)
(בתרגול הבא)בקרת זרימה בתסריטים
תהליכיםניהול Chapter 5 - Windows Processes 23 Shayke Billu PhD
ביצוע הפקודה
נקודות מתקדמות –עיבוד הפקודה
I/O redirection - פקודת המיקום מחדש
I/O redirection י ה"מתבצע ע-Shell . תפקידו
להפנות את הקלט והפלט של הפקודה המבוצעת
קובץ/מסך/מקלדת: לערוץ המתאים
המבוצעת כלל אינה מודעת לכך שבוצע הפקודה
I/O redirection , כיוון שכל ההפניות מבוצעות
Shell -י ה"ע
Chapter 5 - Windows Processes 24 Shayke Billu PhD
Pipeline הצינור"פקודת"
ה-pipeline י התו "הינו סדרת פקודות המופרדות ע
‘|’ .
השנייהמבוצעות באופן סדרתי האחת אחר הפקודות ,
standard -פקודת המפנה את Shell -הכאשר
output של כל פקודה
של הפקודה standard input -ל pipeline -ב
. הבאה
Chapter 5 - Windows Processes 25 Shayke Billu PhD
נקודות מתקדמות –עיבוד הפקודה
טיפול במחרוזות
ה-shell התווים . מפריד את שורת הפקודה למילים
מהווים מפרידים בין מילים tab -ורווח
למשל )בתוכה רווחים במידה ונרצה שמילה תכיל
יש לשים את המילים ( מסויימתלפקודה כארגומנט
יתייחס אליהן כאל shell -וההנפרדות בתוך גרשיים
.מילה אחת –מחרוזת
Chapter 5 - Windows Processes 26 Shayke Billu PhD
נקודות מתקדמות –עיבוד הפקודה
סוגי גרשיים –עיבוד הפקודה ` - גרש הפוך(back quote)
" - גרשים כפולות(double quote)
' - גרש יחיד(single quote)
back quotes משמשים לצורךcommand substitution .
ה-shell מתייחס לכל המחרוזת בין ה-back quotes כאלתוצאת הפקודה מוחלפת במחרוזת . פקודה אחת ומבצע אותה
. הפקודה
ובתוצאת הפקודה ישנם רווחים אזי הבמידה-shell יתייחס מיליםלתוצאת הפקודה כאל מספר
Chapter 5 - Windows Processes 27 Shayke Billu PhD
סוגי גרשיים –עיבוד הפקודה
single quotes ו- double quotes משמשים בכדי
מופרדות )להתייחס למספר מילים Shellלגרום ל
. כאל מילה אחת( וטאביםברווחים
י השמת של מחרוזת בין גרשיים ניתן לגרום ל"ע-
Shell להתנהג באופן שונה מהרגיל.
Chapter 5 - Windows Processes 28 Shayke Billu PhD
סוגי גרשיים –עיבוד הפקודה
למשתנה במידה ומופיעה התייחסות –משתנים החלפת
המשתנה יוחלף double quoted string -בתוך ה
. בערכו
מופיעה בתוך במידה וההתייחסותsingle quoted string
:לא תתבצע החלפה
> set a = AAA
> echo “a=$a”
a=AAA
> echo ‘a=$a’
a=$a
Chapter 5 - Windows Processes 29 Shayke Billu PhD
סוגי גרשיים –עיבוד הפקודה
לא מבוצעת עבור –שמות קבצים החלפתsingle
or double quoted strings.
הנמצאת בכאשר המחרוזת –פקודות החלפת-
back quotes הסימון של מופיעה בתוךdouble
quote ה- shell מתייחס לתוצאת כאל מילה אחת.
Chapter 5 - Windows Processes 30 Shayke Billu PhD
קבצי סקריפט
קבציscript סדרה של פקודות שמכילים הם קבצים
shell , אלו מהווים מעין תוכניות הכתובות תסריטים
Shell -בשפת ה
אלו נכתבות בקובץ רגיל ולאחר מכן מורצותתוכניות
מספר דרכים להריץ תסריטיםישנן .
אחת הנה באמצעות הפקודה דרךsource .
>source clean
cleanתריץ את התסריט
. Chapter 5 - Windows Processes 31 Shayke Billu PhD
קבצי סקריפט
והקובץ במידהclean (אשר הנו קובץ טקסט רגיל )
:הבאותהכיל את הפקודות
rm *.o
mv ex1 ex1.old
הקבצים מסוג ימחקו כל , אזי לאחר ביצוע הפקודה
object ושם הקובץex1 לישונה-ex1.old.
Chapter 5 - Windows Processes 32 Shayke Billu PhD
C-shell שפת התסריטים של
:C-shellבכתיבת התסריטים נעזר בכל יכולות ה
nix במשתניםושימוש הגדרה
שימוש ב- File name expansion
תוכניות שמושיות בU –
יתרונו של התסריט ב-C-shell הנו יכולתו להריץ תוכניות
. שכבר נמצאות במערכת בקלות
מערכת בכלunix קיים סט של תוכניות שמושיות–
utilities בתסריטאשר ניתן לנצלן לצורך שילובן Chapter 5 - Windows Processes 33 Shayke Billu PhD
בבקרה מבני- C-shell
כ כ"משמשים בדמאלה אלא תסריטים אינם תחליף לתוכנית-
בין תוכניות קיימות" דבק חכם"
גם בעת ביצוע תסריט מתבצעות כל ההחלפות בעת ניתוח
פ אותו הסדר אשר הוצג בשיעור שעבר"שורת פקודה ע
Chapter 5 - Windows Processes 34 Shayke Billu PhD
C-shell שפת התסריטים של
CShell -מבני בקרה ב
ב- CShell יש מבני בקרה הדומים לאלה אשר בשפת
C
לולאות
משפטי תנאי
קפיצה בלתי מותנת
Chapter 5 - Windows Processes 35 Shayke Billu PhD
CShell -לולאות ב :repeatמשפטי
על הפקודה חוזרCShell command בדיוקcount פעמים.
>repeat 3 echo hello world
hello world
hello world
hello world
כפי שרואים פקודה זו שמושית גם בצורת עבודה .אינטראקטיבית
repeat <count> <cshell command>
Chapter 5 - Windows Processes 36 Shayke Billu PhD
CShell -לולאות ב משפטיwhile:
while (<expression>)
<cshell commands>
end
> source
count10
0
1
2
3
4
5
6
7
8
9
# count10 script:
@ i = 0
while ($i<10)
echo $i
@ i++
end
Chapter 5 - Windows Processes 37 Shayke Billu PhD
CShell -לולאות ב
לפי המוצגים ברשימה המשתנה מקבל את כל אחד מהערכים .סדר
הלולאהשל איטרציהערך אפשרי של המשתנה מתבצעת לכל ,או להתאים לתבנית , יכולה להיות כתובה במפורשהרשימה
.קבציםבדומה לשמות של
כי במדריך מסוים קיימים הקבצים הבאיםנניח:
amortize.c, helloworld.c, prog.c
foreach <variable> (<list of words>)
<cshell commands>
end
:foreach משפטי
Chapter 5 - Windows Processes 38 Shayke Billu PhD
CShell -לולאות ב
:הפקודה, אזי
foreach F (*.c)
echo $F
end
:תדפיס
amortize.c
helloworld.c
prog.c
בלולאותforeach ו- while ניתן גם להשתמש בפקודותbreak .C -כמו ב continue -ו
Chapter 5 - Windows Processes 39 Shayke Billu PhD
משפטי תנאי
:הינם ifהתנאים אותם ניתן לבחון במשפט ה תנאים חשבוניים :if ($a > 0( …
השוואת מחרוזות :if ($a == "kiko"( …
ל יחודייםתנאיםc-shell:
if (<expression>) <one cshell command>
או
if (<expression>) then
<cshell commands>
[else
<cshell commands>]
endif
:if משפטי
if (-d $dir) then
cd $dir
…..
endif
ואם כן עובר אליו, מכיל שם מדריך dirבודק אם המשתנה
Chapter 5 - Windows Processes 40 Shayke Billu PhD
התאמה בין מחרוזות -משפטי תנאי
י "עכזו המתבצעת , פרט להשוואה רגילה בין שתי מחרוזות
לבדוק התאמה בין מחרוזות באופן חלקי ניתן , ==האופרטור
=~באמצעות האופרטור
בצד שמאל של האופרטור חייבת להופיע מחרוזת מלאה אך
: בצד ימין יכולה להופיע מחרוזת הכוללת סימנים מיוחדים כגון
שמשמעותם תוארה בשקפים קודמים [ ]או , ?, $
היא = ~השלילה של האופרטור~! .
Chapter 5 - Windows Processes 41 Shayke Billu PhD
התאמה בין מחרוזות -משפטי תנאי
> if (end_with_z =~ *[zZ]) echo match
match
> if ("no point in string" !~ *.*) echo "no point"
no point
> if ("no point - . - in string" !~ *.*) echo "no point"
>
.משווים בין מספרים( 'וכד= >, <, <)האופרטורים
.משווים בין מחרוזות! ~= , ~=!, ==האופרטורים
> if (0123 != 123) echo NOT
NOT
Chapter 5 - Windows Processes 42 Shayke Billu PhD
משפטי תנאיswitch (<string>)
case <string1>:
<cshell commands>
[breaksw]
case <string2>:
<cshell commands>
[breaksw]
.
.
.
case <string_n>:
<cshell commands>
[breaksw]
[default:
<cshell commands>]
endsw
switch ($F)
case "*.c":
lpr $F
breaksw
case "*.o":
rm $F
breaksw
endsw
:switch משפטי
Chapter 5 - Windows Processes 43 Shayke Billu PhD
קפיצה בלתי מותנת
:gotoמשפטי :<label> -קופץ למקום המסומן ב -
goto <label>
if (-f diary) then
lpr diary
else goto endprog
endif
if (-f diary2) then
lpr diary2
endif
endprog:
אחרת קופצים , אז מדפיסים אותו וממשיכים diaryאם קיים קובץ
.לסוף התוכנית
goto -בלא רצוי להשתמש !( כרגיל)אך , לטיפול בשגיאותשימושי
.באופן כלליChapter 5 - Windows Processes 44 Shayke Billu PhD
הרצת קבצי סקריפט
: בשתי דרכים scriptניתן להריץ את קבצי ה
י "להריץ את הקובץ בכל פעם עsource <file name>
הקובץ מורץ בתוך ה-shell ולכן יש לו גישה , הנוכחי
למשתנים שהגדרנו ושינויים שהוא יבצע במשתנים
"ייזכרו"
לקבוע את הקובץ כexecutable י "להריץ אותו ע, פעם אחת
<file name>
Chapter 5 - Windows Processes 45 Shayke Billu PhD
הרצת קבצי סקריפט
> chmod +x myscript
,כעת. executable -ל myscriptהופך את הקובץ
:הפקודה
> myscript
shellבתוך , scriptכקובץ myscriptתריץ את הקובץ
למשתנים לא ששינויים שיתבצעו כך , משל עצמוחדש
להרצה" מחוץ"ייזכרו
Chapter 5 - Windows Processes 46 Shayke Billu PhD
הרצת קבצי סקריפט כל קובץscript שרוצים להריץ בצורה זו חייב להתחיל עם
:השורה הבאה
#! /usr/local/bin/tcsh -f
. במחשבים שונים כתובת קובץ ההפעלה יכולה להשתנות•
שם של שבהינתן, whichלמצוא מהי באמצעות הפקודה ניתן •
, מכיר shell-ים שה-PATH-באחד הקובץ הפעלה שנמצא
.מחזירה את הכתובת המלאה שלו
יש להשתמש shellבאיזה
לצורך הרצת התסריט
לא לקרוא את קבצי shell-אומר ל
האתחול שנקראים בדרך כלל
Chapter 5 - Windows Processes 47 Shayke Billu PhD
setup קבצי שרצים אוטומטיתמיוחדים scriptהם קבצי setupקבצי
. בזמנים מסוימיםהמערכת י "ע
:אלו הםקבצים
.login - מבוצע עם כניסת משתמש לחשבונו
.cshrc - מבוצע בהתחלת כלshell
אלה מופעלים בצורה אוטומטית בזמנים קבצים
או , סביבה חשוביםבהם משתני לאתחל נהוג , מצוינים
. aliasלפקודות עם חדשים שמות להגדיר
:דוגמא
<cat .cshrc
set path = ($path ./)
set history=40
alias ll 'ls -al'
alias m 'more'
alias . 'pwd'
alias .. 'cd ..'
alias ... 'cd ../..'
Chapter 5 - Windows Processes 48 Shayke Billu PhD
סקריפט לקבציפרמטרים לקבציניתן לתת פרמטרים script .
לפרמטרים אלה בתוך קובץ הניתן להתייחס- script כדלקמן: $0 - הפקודה עצמה
$1 - הפרמטר הראשון(באופן כללי :${n} מתייחס לפרמטר ה-n.)
$* - רשימת כל הפרמטרים הנתונים לפקודה
{- ${#argv מציין את מספר הפרמטרים הנתונים לפקודה.
- ${argv[n]} מציין את הפרמטר מספרn.
שתפקידו להדפיס את הקבצים שהוא מקבל כפרמטרים printקובץ בשם
#! /usr/local/bin/tcsh -f
foreach F ($*)
lpr $F
end
: דוגמת הרצה
> print a.c b.c prog.c
Chapter 5 - Windows Processes 49 Shayke Billu PhD
קריאת שורות מקבצים קוראת שורה מה ( (>$הפקודה- standard input לתור רשימה.
> set str2 = ($<)
This line is typed by the user
> echo $str2
This line is typed by the user
> echo $str2[1]
This
> echo $str2[2]
line
כאן נוצרה רשימהstr2 התוכן שלה הוא שורת הקלט מהאשרstandard input -
!!!אפשרות לקרוא שורות קלט מקובץ cshell-אין ב standard input -רק מה
Chapter 5 - Windows Processes 50 Shayke Billu PhD
קריאת שורות מקבציםכותבים את ה, כאשר רוצים לקרוא קובץ-script שמטפל
standard-מידע מהבשורות הקובץ כאילו הוא מקבל קלט
input
לאחר מכן יוצרים קובץscript שתפקידו , "מעטפת" -חדש
תוך שהוא מפנה אליו את , המקורי script-להפעיל את ה
הקובץ שאותו רוצים לקרוא
: כלומר
אנחנו גורמים לקובץ שאנחנו pipelining -באמצעות השימוש ב
.הסקריפטשל standard input -הרוצים לקרוא להופיע בתור
Chapter 5 - Windows Processes 51 Shayke Billu PhD
דוגמא
>cat football
Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv
Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer Sheva
Ronen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-Aviv
Reuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-Aviv
Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv
Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Haifa
Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem
Izak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-Hiafa
Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva
Ronen Har.3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa
המכיל נתונים על שערים שהובקעו footballנתון קובץ
, שורה בקובץ מציינת שם של שחקןכל . במשחקי כדורגל
מספר השערים שהבקיע במשחק שנערך בתאריך
.שם הקבוצה בה הוא שיחק ושם הקבוצה היריבה, מסוים
Chapter 5 - Windows Processes 52 Shayke Billu PhD
דוגמאאשר יקבל כפרמטר , playerבשם scriptברצוננו לכתוב
כל השורות של הקובץ וידפיס את שם מלא של שחקן
football כ"ובנוסף ידפיס את סה, בהן מופיע שם השחקן
.מספר השערים שהוא הבקיע
:יהיה .Alon Mizהפלט עבור שורת הקלט , לדוגמא
< player “Alon Miz.”
Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv
Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem
Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva
total number of goals: 6
Chapter 5 - Windows Processes 53 Shayke Billu PhD
פתרון
ב- script בשםplayer לא נוכל לבצע קריאת שורה-
ולכן נשתמש בו בתור footballשורה של הקובץ
script-את העבודה האמתית נבצע ב, מעטפת בלבד
אשר יבצע את מבוקשנו על קלט calc_totalאחר בשם
. standard input-שיתקבל מה
כעת ,script המעטפתplayer כעת יכול להשתמש
אל footballשל הקובץ על ידי הפנייה , calc_total -ב
.שלו standard input-ה
:את שני התסריטים לביצוע המשימהנציג
Chapter 5 - Windows Processes 54 Shayke Billu PhD
פתרון
> cat calc-total
#!/usr/local/bin/tcsh -f
set line = ($<)
set sum = 0
while (${#line} != 0)
@ sum = $sum + $line[3]
echo $line
set line = ($<)
end
echo "total number of goals: $sum"
> cat player
#!/usr/local/bin/tcsh -f
grep "$1" football | calc-total
Chapter 5 - Windows Processes 55 Shayke Billu PhD
דוגמא מסכמת
לפנינוscript בשםscores המדרג את השחקנים
לפי , אשר שמותיהם המלאים מועברים כפרמטר
. footballהנתונים המוכלים בקובץ
של כל שחקן ייקבע על פי מספר השערים שהוא הדירוג
שני שחקנים שהבקיעו מספר זהה של כאשר , הבקיע
.שערים יקבלו דירוג זהה
את שמו , מדפיסה עבור כל שחקן את דירוגוהתוכנית
.המלא ואת מספר השערים שהבקיע
Chapter 5 - Windows Processes 56 Shayke Billu PhD
דוגמא מסכמת
>cat football
Alon Miz. 2 23/10/93 Macabi-Haifa Macabi-Tel-Aviv
Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Beer Sheva
Ronen Ha. 3 27/12/93 Hapoel-Tel-Aviv Macabi-Tel-Aviv
Reuven A. 2 12/11/93 Macabi-Haifa Hapoel-Tel-Aviv
Eyal Ber. 1 20/11/93 Macabi-Haifa Macabi-Tel-Aviv
Izak Zoh. 1 12/11/93 Macabi-Tel-Aviv Hapoel-Haifa
Alon Miz. 2 26/10/93 Macabi-Haifa Beitar-Jerusalem
Izak Zoh. 2 12/12/93 Macabi-Tel-Aviv Macabi-Hiafa
Alon Miz. 2 23/12/93 Macabi-Haifa Macabi-Pet-Tikva
Ronen Har.3 27/11/93 Hapoel-Tel-Aviv Macabi-Haifa
Chapter 5 - Windows Processes 57 Shayke Billu PhD
דוגמא מסכמת
: דוגמא להפעלת הסקריפט
> scores "Alon Miz." "Izak Zoh." "Ronen Ha." "Reuven A."
1 Alon Miz. 6
1 Ronen Ha. 6
2 Izak Zoh. 4
3 Reuven A. 2
Chapter 5 - Windows Processes 58 Shayke Billu PhD
פתרון
> cat scores
#!/usr/local/bin/tcsh -f
@ i = 1
while ( $i <= ${#argv} )
grep "${argv[$i]}" football | calc_score >>! temp
@ i++
end
sort -n +2 -r temp | calc_place
if (-f temp) then
rm -f temp
endif
כ "יחזיר את שם השחקן וסה
הגולים שהבקיע ' מס
ימספר את השחקנים
בהתאם לדירוגם
Chapter 5 - Windows Processes 59 Shayke Billu PhD
פתרון
> cat calc_place
#!/usr/local/bin/tcsh -f
set line = ($<)
set place = 1
@ goals = $line[3]
while (${#line} != 0)
if ($goals != $line[3]) then
@ place++
@ goals = $line[3]
endif
echo "$place $line"
set line = ($<)
end
> cat calc_score
#!/usr/local/bin/tcsh -f
set line = ($<)
set sum = 0
set player_name = ($line[1-2])
while (${#line} != 0)
@ sum = $sum + $line[3]
set line = ($<)
end
echo "$player_name $sum"
Chapter 5 - Windows Processes 60 Shayke Billu PhD
UNIX -בקרת תהליכים ב
Unix היא מערכת הפעלה המסוגלת לשרת מספר רב של
וכמו כן כל משתמש יכול להריץ בו , משתמשים בו זמנית
תהליכים במקבילזמנית מספר רב של
להרוג תהליך שיצר , תהליך יכול ליצור תהליכים נוספים
ולשלוח הודעות לתהליכים אחרים במערכת
בקורס זה לא נלמד כיצד תהליכים מבצעים את כל הפעולות
אלא נלמד כיצד , (נשאיר זאת לקורס במערכות הפעלה)ל "הנ
משתמש יכול לייצר מספר תהליכים ולשלוט על אופן ביצועם
Chapter 5 - Windows Processes 61 Shayke Billu PhD
יצירת תהליכים :ישנן שתי צורות להריץ תוכניות Unix -ב
foregroundהרצה בחזית
י כתיבת הפקודה"עמתבצעת:
<command>
פקודה המורצת בחזית גורמת ל-prompt להיעלם עד לסיוםהפקודה ולכן לא נוכל להקליד פקודה נוספת כל עוד הפקודה
הנוכחית לא הסתיימה
ברקע היותר הרצה בחזית יכולה להתבצע פקודה אחת לכלbackground
Chapter 5 - Windows Processes 62 Shayke Billu PhD
יצירת תהליכים י כתיבת הפקודה בתוספת "עמתבצעת& :
<command> &
>gcc Calc.c -o Calc
.הפקודה מורצת בחזית
>gcc Calc.c -o Calc &
>
.הפקודה מורצת ברקע
על מנת לבצע מספר תוכניות בו זמנית יש להריצן הפרומפטתחילת ביצוע פקודה ברקע מופיע לאחר . ברקע
במקביל נוספות שתתבצענה וניתן לתת למערכת פקודות ברקעלפקודה שהורצה
Chapter 5 - Windows Processes 63 Shayke Billu PhD
בעזרת הפקודהjobs ניתן לבדוק אילו תהליכים
:shell-קיימים ב
התהליך –" נוכחי"מייצג את התהליך ה"+" -הסימן
שהוא ברירת המחדל לפקודות שנציג בהמשך
התהליך שיקבל את –" יורש"מייצג את ה" -"-סימון ה
אחרי שהתהליך הנוכחי יסיים את ריצתו"+" -סימן ה
Chapter 5 - Windows Processes 64 Shayke Billu PhD
יצירת תהליכים
< more forever.c
main()
{
printf("I am going to run forever !!!\n");
while (1) ;
}
> forever &
[1] 587
> I am going to run forever !!!
> jobs
[1] + Running forever
> kill -9 %1
>
[1] Killed forever
>jobs
[1] + Running cc prog.c
[2] - Running troff -me big_doc.roff
פקודות נוספות המאפשרות הצגה של
התהליכים
:שקיימים כרגע הן
ps -ו top .
ניתן למצוא את המידע שלהן man-בקבצי ה
Chapter 5 - Windows Processes 65 Shayke Billu PhD
יצירת תהליכים
פקודות לניהול תהליכים בכל הפקודות שנלמד בהמשך לניהול תהליכים יש מספר דרכים
:לציין תהליך מסוים
%n - תהליך מספרn.
%s - התהליך אשר שורת פקודתו מתחילה במחרוזתs.
%?s - job אשר שורת פקודתו מכילה את המחרוזתs.
%% - (.התהליך שסומן ב)התהליך הנוכחי"+"
%- - (.-"התהליך שסומן ב)התהליך הבא"
לדוגמא כל המחרוזות הבאות מתייחסות לאותו תהליך מהדוגמא :הקודמת
%1
%forever
%for
%?ever
Chapter 5 - Windows Processes 66 Shayke Billu PhD
העברת תהליכים לחזית
מעבירה את התהליך הנוכחי או[jobIDs] לחזית.
fg [jobIDs]
> more try_input.c
main()
{
char str[20];
printf("I shall try to eat something");
scanf("%s" , str);
printf("%s" , str);
}
> try_input&
[1] 828
> I shall try to eat something
[1] + Suspended (tty input) try_input
> jobs
[1] + Suspended (tty input) try_input
> fg %1
try_input
goodies
goodies
>
Chapter 5 - Windows Processes 67 Shayke Billu PhD
העברת תהליך לרקע
מעבירה את התהליך הנוכחי או[jobIDs] לרקע
bg [jobIDs]
> jobs
[1] + Suspended forever
> bg %1
[1] forever &
> jobs
[1] Running forever
>
Chapter 5 - Windows Processes 68 Shayke Billu PhD
השעיית תהליךCtrl-z - משעה את התהליך המתבצע כרגע בחזית .
י שימוש בפקודות "מושעה ניתן להעביר לחזית או לרקע עתהליךfg אוbg.
הפקודהstop jobIDs
jobIDsאת משעה
> nroff -ms report
Ctrl-z
[1] + Suspended nroff
<bg %
> emacs &
[1] 982
> forever&
[2] 991
> jobs
[1] + Running emacs
[2] - Running forever
> stop %2
>
[2] + Suspended (signal) forever
> jobs
[1] - Running emacs
[2] + Suspended (signal) forever
>
Chapter 5 - Windows Processes 69 Shayke Billu PhD
הריגת תהליך
Ctrl-c - הורג את התהליך המתבצע כרגע בחזית
הפקודהkill -9 jobID הורגת את התהליךjobID.
פקודת , שמה האכזרילמרותkill משמשת באופן כלליבפועל שתי ההודעות הנפוצות ביותר שאנו . לשליחת הודעות
תמות תכף "ו( SIGTERM" )תמות"שולחים לתהליכים הן (.SIGKILL!" )ומייד
< forever&
[1] 660
> I am going to run forever !!!
> kill -9 %fo
> jobs
>
Chapter 5 - Windows Processes 70 Shayke Billu PhD
הריגת תהליך הפרמטר הדרוש לפקודתkill ,הוא , בנוסף למזהה התהליך"-
n" , כאשרn הוא מספר מזהה של הודעה .
ברירת המחדל היא שליחת ההודעה , לא מוסיפים מספראם ". תמות" – 15שמזוהה עם המספר
ומיידתמות תכף "היא 9שמזוהה עם המספר ההודעה ."!
מאפשרת לתהליך " תמות"בן שתי ההודעות היא שההבדלכמו ביצוע סגירה של )להרוג את עצמו בצורה מסודרת
במערכת shut downהמחשב על ידי לחיצה על הכפתור תמות תכף "ואילו , ואפילו להתעלם מההוראה( ההפעלה
כמו ביצוע סגירה של ) ומיידהורגת את התהליך תכף !" ומייד (המחשב על ידי ניתוק מהחשמל
Chapter 5 - Windows Processes 71 Shayke Billu PhD