תרגול 6

68
ללללל6 ללללללל לללל ללללללללל- לUNIX C-Shell לל לללל- לל[email protected] לללל לללללל ל''ל לללל לללללללל

Upload: giacomo-chapman

Post on 30-Dec-2015

30 views

Category:

Documents


5 download

DESCRIPTION

תרגול 6. תוכניות שרות סטנדרטיות ב- UNIX C-Shell. לי-טל משיח [email protected] נערך והורחב ע''י ודים אייזנברג. תוכניות שרות סטנדרטיות ב- UNIX. בכל מחשב בו מותקנת מערכת הפעלה מסוג Unix מותקנות בנוסף מספר תוכניות שרות (utilities) סטנדרטיות - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: תרגול 6

6תרגול

UNIXתוכניות שרות סטנדרטיות ב-C-Shell

[email protected]לי-טל משיח

נערך והורחב ע''י ודים אייזנברג

Page 2: תרגול 6

UNIX תוכניות שרות סטנדרטיות ב- UnixUnixבכל מחשב בו מותקנת מערכת הפעלה מסוג •

((utilitiesutilities))תוכניות שרות תוכניות שרות מותקנות בנוסף מספר סטנדרטיותסטנדרטיות

סטנדרטיות ((commandscommands))פקודות פקודות בפשטות נקראות גם – יכול להריץ תוכניות אלה לצרך Unixכל משתמש •

ביצוע משימות שלו)שרות ורגילות( לשלב בין תוכניות לשלב בין תוכניות ניתן Unixב-•

בצורה נוחהבשורת הפקודה בשורת הפקודה בשורת פקודה אחתבשורת פקודה אחתיחסית משימות מורכבות משימות מורכבות לבצע –

וצורה נוחה התוכניות הסטנדרטיות התוכניות הסטנדרטיות מספר גדול של •כוח רב למשתמשכוח רב למשתמשביניהן מקנים ההרכבהההרכבהשל

22

Page 3: תרגול 6

echoהפקודה

echo <parameters>echo <parameters>מדפיסה את הפרמטרים שלה•

33

>echo Hello world !Hello world !

Page 4: תרגול 6

פקודות לעיבוד קבצים

Unixנלמד מספר פקודות לעיבוד קבצים ב-•

עיבוד קבצים:•קבציםתוכן תוכן הדפסת –מקבציםשורות מסוימות שורות מסוימות הדפסת –בצורה ממוינתבצורה ממוינתהדפסת קבצים –מקבציםחלקי שורות חלקי שורות הדפסת –, מילים ותווים בקבצים ספירת שורותספירת שורות–

44

Page 5: תרגול 6

פורמט של רוב הפקודות לעיבוד קבצים

command [options] [input files]command [options] [input files])דגלים(, בד''כ כלל אופציותאופציותהפקודה מקבלת •

תו "-" ואות אחת

קובצי קלטקובצי קלטהפקודה מקבלת אחד או כמה •

אם לא ניתן אף קובץ קלט הפקודה מצפה •הקלט הסטנדרטיהקלט הסטנדרטילקלט מ

פלט פלט הפקודה מוציאה את הפלט שלה ל•הסטנדרטיהסטנדרטי

55

Page 6: תרגול 6

headהפקודה head [-N] [input files]head [-N] [input files]

מתוך הקלטהשורות הראשונות Nמדפיסה •10ברירת מחדל היא –בהינתן הקבצים –

•a_file

•b_file

66

a line 1a line 2a line 3a line 4a line 5

b line 1b line 2b line 3

> head -2 a_filea line 1a line 2

> head -1 < b_fileb line 1

> head -2 a_file b_file==> a_file <==a line 1a line 2

==> b_file <==b line 1b line 2

Page 7: תרגול 6

tailהפקודה

tail -N [input files]tail -N [input files]מתוך הקלטהשורות האחרונות NNמדפיסה •

10ברירת המחדל היא –

tail +N [input files]tail +N [input files]מתוך הקלט השורות האחרונות מדפיסה •

NNהחל מהשורה החל מהשורה

77

> tail -2 a_filea line 4a line 5

> tail +2 a_filea line 2a line 3a line 4a line 5

Page 8: תרגול 6

3 ו-2להדפיס שורות משימה פשוטה:של קובץ

?tail ו-headאיך עושים את זה בעזרת •

> head -3 > first3> tail -2 first3a line 2a line 3> rm first3

מסורבל

88

Page 9: תרגול 6

פתרון פשוט : שילוב בין תוכניות pipelineבעזרת

בין תוכניות בעזרת מגנון לשלבלשלב ניתן Unixב-•pipelinepipeline:

> program1 | program2 | program3> program1 | program2 | program3מחובר מחובר command1 הסטנדרטי של הפלטהפלט•

בעזרת סימן command2הסטנדרטי של לקלט לקלט ''II''

99

command1 stdout command2stdin stdout command3stdin

Page 10: תרגול 6

Pipelining

> program1 | program2 | program3> program1 | program2 | program3את לוקחת כקלט לוקחת כקלט pipelineכל תוכנית ב-•

, מבצעת את המשימה הפלט של קודמתההפלט של קודמתהלבאה אחריה לבאה אחריה הפלט שלה שלה ומעבירה את

בשורה.head -3 a_file | tail -2 <פתרון של המשימה הקודמת בשורה אחת:–

a line 2a line 3

1010

Page 11: תרגול 6

catפקודה

cat file_1 file_2 … file_k cat file_1 file_2 … file_k ,file_1,file_2מדפיסה את תוכן הקבצים •

…,file_k אחד אחרי השניאחד אחרי השני לפלט הסטנדרטי

cat b_file a_file | head -4 <דוגמא : •b line 1b line 2b line 3a line 1

1111

Page 12: תרגול 6

lessהפקודה

less <input file>less <input file>עם ההפסקה עם ההפסקה מציגה את הקובץ על המסך •

אחרי כל דףאחרי כל דףבקובץ המוצג בעזרת לדפדף קדימה ואחורה לדפדף קדימה ואחורה ניתן –

מקשי החצים ואחריו / מחרוזת על ידי הקשת תו לחפשלחפשניתן –

המחרוזת לחיפושCtrl-c q או q:יוצאים מהפקודה על ידי הקשת –

1212

Page 13: תרגול 6

lsהתנהגות הפקודה

מדפיסה רשימת קבציםlsהפקודה •

הפלט שונה בהתאם ליעד הפלט שונה בהתאם ליעד צורת •הפלט

מדפיסה את ls למסךלמסךאם הפלט מיועד –בשורותבשורותקבצים

pipepipe, lsלקובץ או ל-לקובץ או ל-אם הפלט מיועד –אחד בשורהאחד בשורהמדפיסה את הקבצים

> lsaaa ccc eeebbb ddd

> ls | cataaabbbcccdddeee

> ls > out> less outaaabbbcccdddeee

1313

Page 14: תרגול 6

teeהפקודה

tee [options][files] tee [options][files] את כל מה שנכנס לקלט משכפלתמשכפלתהפקודה •

לפלט הסטנדרטי לפלט הסטנדרטי אותו הן ושולחתושולחתהסטנדרטי שלה [files]ב לכל אחד מהקבצים לכל אחד מהקבצים והן

לדוגמא, אם בנוסף להצגת השורה השנייה •והשלישית נרצה לשמור את שלוש השורות

בשני קבצים שונים, נוכל a_file הראשונות של הקובץ לבצע :

אופציות נוספות:• של הפלט לסוף הקבצים שרשורשרשור מאפשרת a-האופציה –

[files].במקום מחיקתם

> head –3 a_file | tee file1 file2 | tail –2

1414

Page 15: תרגול 6

teeתיאור גרפי של הפעולה של

1515

From From http://commons.wikimedia.org/wiki/File:Tee.svg, Creative Commons License, Creative Commons License

Page 16: תרגול 6

teeהפקודה

tee [options][files] tee [options][files] לא בפורמט לא בפורמט היא teeשימו לב שהפקודה •

הסטנדרטי של פקודות לעיבוד קבצים:רק מהקלט הסטנדרטירק מהקלט הסטנדרטיהיא מקבלת את הקלט –, ולא לקלטהקבצים לפלטהקבצים לפלטהיא מקבלת רשימת –

1616

From From http://commons.wikimedia.org/wiki/File:KF_25_Tee.jpg Creative Commons LicenseCreative Commons License

Page 17: תרגול 6

sortהפקודה

sort [options] [files]sort [options] [files]ממוינת ממוינת מדפיסה את תוכן הקלט בצורה •

מיון לקסיקוגרפי בררת מחדל:–אופציות:•

-n מספרימספרי ממיין בסדר-r את סדר המיון הופךהופך-k num החל ממילה החל ממילה לכל שורה מתייחסמתייחסnumnum המילים ,

1ממוספרות החל מ--fמתעלם מהבדלי uppercase/lowercaseuppercase/lowercase -m מספר קבצים שכבר מויינו לקובץ אחד )יותר יעיל ממזגממזג

מאשר למיין אותם שוב כקובץ אחד(-bרווחים בתחילת השורהרווחים בתחילת השורה מתעלם מ-d פיסוקפיסוק מתעלם מסימני

1717

Page 18: תרגול 6

- דוגמאותsortהפקודה > less data WorldwhouldforFather> sort dataFatherWorldforwhould> sort data -fFatherforwhouldWorld> sort data -rwhouldforWorldFather

> ls -altotal 6-rw------- 1 romano root 520 Nov 8 23:09 data-rw------- 1 romano 368 43 Nov 8 23:12 ex1-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 322 Nov 10 13:30 ex3> ls -al | sort -n -k 5total 6-rw------- 1 romano 368 43 Nov 8 23:12 ex1-rw------- 1 romano 368 322 Nov 10 13:30 ex3-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano root 520 Nov 8 23:09 data>

1818

Page 19: תרגול 6

סדר מילוני לעומת מספרי

המילוניהמילוניבין הסדר להבדיללהבדיל חשובחשוב•המספריהמספרי)לקסיקוגרפי( והסדר

1919

> less numbers221113

> sort numbers111223

> sort numbers -n322111

Page 20: תרגול 6

grepהפקודה

grep [options] [^]word [files]grep [options] [^]word [files]wordמדפיסה שורות בהן מופיעה המילה •אופציות:•

-v לא מופיעה לא מופיעה הדפס את השורות, בהןword (פעולה הפוכהפעולה הפוכה)-i התעלם מהבדלי uppercase/lowercaseuppercase/lowercase-w מופיעהמופיעההדפס את כל השורות בהן word

)לא כתת מחרוזת( בדיוקבדיוק

2020

Page 21: תרגול 6

דוגמאותgrep - הפקודה

בהינתן הקובץ–•farm1

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

> grep cow farm1cow Betsyslim cow Dazytwo cows Dartsy & Teo

> grep -v cow farm1goat UptonFat Cow Burgerhorse Admiral

> grep -i cow farm1cow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teo

> grep -w cow farm1cow Betsyslim cow Dazy

2121

Page 22: תרגול 6

נקודות נוספותgrep - הפקודה

ביטויביטויאם רוצים לחפש שורות בהן מופיע • המופרדות ע"י רווחים, מספר מיליםמספר מיליםהמורכב מ

כותבים את הביטוי בין גרשיים:

> grep "slim cow" file> grep "slim cow" file מדפיסה grep מופיע לפני המילה, ^כשסימן •

במילה הזאת:המתחילותאת כל השורות

> grep ^cow file> grep ^cow file

2222

Page 23: תרגול 6

דוגמאותgrep - הפקודה

בהינתן הקובץ–•farm1

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

> grep "slim cow" farm1slim cow Dazy> grep ^cow farm1cow Betsy

2323

Page 24: תרגול 6

- אופציות נוספותgrepהפקודה

-n בקבציםהשורות ואת מספרן השורות ואת מספרן הדפס את-l בהם השורות שמות הקבציםשמות הקבצים הדפס רק את

עצמן השורותהשורותהדפסת ללא ללא נמצאו -c שנמצאו בכל מספר השורות מספר השורות הדפס רק את

עצמן השורותהשורותהדפסת ללא ללא קובץ

2424

Page 25: תרגול 6

דוגמאותgrep - הפקודה

בהינתן הקבצים –•farm1

•farm2

goat Uptoncow Betsyslim cow DazyFat Cow Burgertwo cows Dartsy & Teohorse Admiral

sheep Brookcow Lenigoat Astercow Oreo

> grep cow farm1 farm2farm1:cow Betsyfarm1:slim cow Dazyfarm1:two cows Dartsy & Teofarm2:cow Lenifarm2:cow Oreo

> grep -n cow farm1 farm2farm1:2:cow Betsyfarm1:3:slim cow Dazyfarm1:5:two cows Dartsy & Teofarm2:2:cow Lenifarm2:4:cow Oreo

> grep -l cow farm1 farm2farm1farm2

> grep -c cow farm1 farm2farm1:3farm2:2

2525

Page 26: תרגול 6

uniqהפקודה

uniq [options] [input_file [output_file]]uniq [options] [input_file [output_file]]הזהות הזהות מדפיסה עותק אחד של כל השורות •

הסמוכותהסמוכות )או בהיעדר output_fileהפלט הולך לקובץ •

, לערוץ הפלט הסטנדרטי(output_fileהקובץ לא בפורמט לא בפורמט היא uniq שימו לב שהפקודה •

הסטנדרטי של פקודות לעיבוד קבצים:רק מקובץ אחדרק מקובץ אחדהיא יכולה לקבל את הקלט –הפלטהפלטהוא קובץ הקובץ השני הקובץ השני –

2626

Page 27: תרגול 6

- אופציותuniqהפקודה

•-cספור עותקיםספור עותקים הדפס כל שורה פעם אחת בלבד ו של כל שורה.

•-d יותר מפעם אחתיותר מפעם אחתשורות המופיעות רקרק הדפס•-u מפעם אחת בלבדמפעם אחת בלבדשורות המופיעות רקרק הדפס

בו זמניתc/-d/-u-ניתן להשתמש רק באחת מהאופציות •

•-N מ- התעלםהתעלם“ N” לפני המילים הראשונות המילים הראשונות(קבלת ההחלטה אם שתי שורות זהות(

2727

Page 28: תרגול 6

- דוגמאותuniq הפקודה > less file3onetwotwothreethreethreeoneone> uniq file3 list> less listonetwothreeone>

> less namesUriDanUriElenaAlexOfraUriOfra

2828

> sort names | uniq -c 1 Alex 1 Dan 1 Elena 2 Ofra 3 Uri

> sort names | uniq -dOfraUri> sort names | uniq

AlexDanElenaOfraUri

> sort names | uniq -uAlexDanElena

Page 29: תרגול 6

cutהפקודה

cut options [files]cut options [files]הקלט משורותמשורותמכל אחת שדותשדותאו תוויםתוויםמדפיסה •אופציות: •

-c list של התווים לפי האינדקסים לפי האינדקסים תוויםתווים הוצא קבוצת”list“בשורה, המופיעים ב-

-f list של השדות שדות לפי האינדקסים שדות לפי האינדקסים הוצא קבוצת. ”list“בשורה, המופיעים ב-

תו מפריד כלשהו. ע''י ע''י המופרדותהמופרדותבשורה - קבוצות תוים שדותשדות של התו המפריד היא ברירת מחדל ברירת מחדל<<tabtab>>

-d”c ” משמשת בנוסף לאופציה -f את לקבועלקבוע ומאפשרת“c” המפריד כהתו

2929

Page 30: תרגול 6

- דוגמאותcutהפקודה

> less file1a11 a12 a13 a14 a15b21 b22 b23 b24 b25c31 c32 c33 c34 c35> cut -c1-3,5,8-10 file1a11a a1b21b b2c31c c3> cut -d" " -f2,4 file1a12 a14b22 b24c32 c34

מספר שדה שאינו מספר שדה שאינו בשורה אך ניתן בשורה אך ניתן קיים התו המפרידקיים התו המפרידבמידה ובמידה ושורה ריקהשורה ריקה-תודפס -תודפס קיים קיים

כל השורהכל השורהבשורה, תודפס בשורה, תודפס התו המפריד לא קיים התו המפריד לא קיים אולם אם אולם אם

> less file2a11:a12:a13 b21:b22 c31 c32 c33 > cut -d":" –f1 file2a11b21 c31 c32 c33 > cut -d":" –f3 file2a13 c31 c32 c33

3030

Page 31: תרגול 6

wcהפקודה

wc [options] [files]wc [options] [files] השורותהשורות או המיליםהמילים, מספר התוויםמספר התוויםמדפיסה •

בקלט

אופציות:•-c בלבד. התוויםהתווים הדפס את מספר-l בלבד. השורותהשורות הדפס את מספר-w בלבד. המיליםהמילים הדפס את מספר

3131

Page 32: תרגול 6

- דוגמאותwcהפקודה

בפורמטבפורמט, הפלט מודפס באף אופציהבאף אופציהאם לא משתמשים •:הבא #<lines> <# words> <# chars> filename

, היא מדפיסה גם כמה קבצי קלטכמה קבצי קלטאם הפקודה מופעלת על •:סיכוםסיכום

> wc -w war_and_peace590234 war_and_peace> wc -l war_and_peace55480 war_and_peace> wc -c war_and_peace3348543 war_and_peace

> wc mtm_ex1.h 120 641 4161 mtm_ex1.h

> wc mtm_ex1.h parsing_example.c 120 641 4161 mtm_ex1.h 136 692 4543 parsing_example.c 256 1333 8704 total

3232

Page 33: תרגול 6

תוכנה

חומרה

מערכת הפעלה

Shell

SHELL •ShellShell (תוכנית שמספקת מעטפתמעטפת - ) ממשק ממשק

(command line interfacecommand line interface) שורת הפקודהשורת הפקודהלמערכת ההפעלה

3333

משתמש

Page 34: תרגול 6

Shells in UNIX

•shell ככל התוכניות. ב- תוכניתתוכנית היאUnix קיימות שונות, שפותחו בזמנים shellshellכמה תוכניות כמה תוכניות

שונים

שונה סינטקססינטקס יש shellלכל •

משלהיתרונות וחסרונות יתרונות וחסרונות יש shellלכל •

•shells ב- נפוציםנפוציםUnix: cshell,bash, kshell shellsשהוא אחד ה- C ShellC Shellאנו נלמד על •

הפופולארייםtcshtcsh שנקאת C shellנשתמש בגרסה המורחבת של –

3434

Page 35: תרגול 6

Shells in UNIX

שרץ עכשיו ?shellאיך יודעים מהו ה-•> echo $0> echo $0bashbash

אחר ?shellאיך עוברים ל-• בשורת הפקודה )הרי shellפשוט מקישים את שם ה-–

shell)היא תוכנית כמו כל התכניות

> tcsh> tcsh> echo $0> echo $0tcshtcsh

3535

Page 36: תרגול 6

SHELL תפקידיו של ה-

ממשקממשק הוא לספק shellהראשון של ה- התפקידהתפקיד•למשתמשכוח רב כוח רב שמקנה נוחנוחשורת פקודה

משתמש האינטליגנטימשתמש האינטליגנטיבמיוחד ל–תפקיד נוסף הוא לספק סביבת ריצה לתסריטים - –

יילמד בתרגול הבא

מאפשרshellה-•לפקודותלפקודותנוחים כינוייםכינוייםלהגדיר –שבוצעולחזור על הפקודות לחזור על הפקודות –בצורה קצרה ונוחהלהתייחס למספר קבצים להתייחס למספר קבצים –ולהשתמש בהם בשורת הפקודה משתניםמשתניםלהגדיר –

3636

Page 37: תרגול 6

מנגנון נתינת כינויים alias :הפקודה לפקודות

alias <new name> <command + parameters>alias <new name> <command + parameters> עם command לפקודה new nameנותנת את השם •

הפרמטריםדוגמאות:•

> alias cdex1 cd ~mtm/public/0809b/ex1> cdex1> alias GCC gcc -std=c99 -Wall -pedantic-errors -

Werror -DNDEBUG> GCC hello.c -o hello

3737

מתבצע cd ~mtm/public/0809b/ex1

מתבצע gcc -std=c99 -Wall -pedantic-errors -Werror -DNDEBUG hello.c -o hello

Page 38: תרגול 6

aliasהפקודה כל כל מדפיסה את בלי פרמטרים בלי פרמטרים aliasהפקודה •

הידועים:הכינוים הכינוים > aliasGCC (gcc -std=c99 -Wall -pedantic-errors

-Werror -DNDEBUG)cdex1 (cd /u/023/mtm/public/0809b/ex1)

unaliasunaliasכינוי על ידי הפקודה לבטללבטלניתן •> unalias GCC> aliascdex1 (cd /u/023/mtm/public/0809b/ex1)

3838

Page 39: תרגול 6

File name expansion

•shell תבנית תבנית ע''י ציון לכמה קבצים לכמה קבצים מאפשר להתייחס שלהםהשמותהשמות

בתיקייה הנוכחיתc. מתייחסת לכל קבצי cc*.*.למשל תבנית –

מקבלות כפרמטרים שמות של UNIXUNIXהפקודות ב-הפקודות ב-רב •, לכן התכונה הזאת מועילה ביותרכמה קבציםכמה קבצים

תדפיס שורות המכילות h grep TODO *.c*.למשל הפקודה– בתיקיה הנוכחיתc. ו-h." בכל קבצי TODOמחרוזת "

בתיקיה הנוכחיתc.תקמפל את כל קבצי gcc *.cהפקודה –של כל שמות הקבציםנחסכת הקלדה נחסכת הקלדה –

3939

Page 40: תרגול 6

File name expansion

את התבנית בונים בעזרת תווים הנקראים •Wildcards

מתאים לכל מחרוזת תווים באורך אפס או יותר*– מתאים לכל תו בודד אחד?– מתאים לכל אחד מהתווים בין ] ל- [][–

הרחבה למספר מחרוזות}{–x{aa,bb,cc}y -> xaay, xbby, xccyללא קשר לקבצים בתיקיה •

a[rxz]b -> arb, axb, azb

4040

Page 41: תרגול 6

-File name expansionדוגמאות

4141

> ls

test17.err test17.out test1.in test2.err test2.out test3.in

test17.in test1.err test1.out test2.in test3.err test3.out

> ls test{17,2}.in

test17.in test2.in

> ls *1*

test17.err test17.in test17.out test1.err test1.in test1.out

> ls test?.in

test1.in test2.in test3.in

> ls test[1,3].in

test1.in test3.in

> ls test[1-3].in

test1.in test2.in test3.in

> echo W{hat,e,ant}

What We Want

Page 42: תרגול 6

משתנים

(C)כמו בשפת משתניםמשתנים ניתן הגדיר CShellב-• על משתני אין צורך להכריזאין צורך להכריז, Cלהבדיל משפת •

CShellפעם פעם להם ערכים מציביםמציביםברגע ש מוגדריםמוגדריםהמשתנים –

ראשונהראשונה

set <variable> = <value>set <variable> = <value> לתוך משתנה <value> מציבה ערך setהפקודה •

<variable> אחריאחריובין אם לא, קיים קודם קיים קודם בין אם המשתנה היה –

שהוצב לתוכוקיים ומכיל את הערך קיים ומכיל את הערך ההצבה הוא 4242

Page 43: תרגול 6

משתנים

לקרואלקרוא, כדי Cלהבדיל משפת •ערך של משתנה לא מספיק

להוסיף להוסיף לציין את שמו - חייבים לפני השם של משתנה $$

משתנה בצורה לבטלניתן •unsetunsetמפורשת על ידי הפקודה

לא משתמשים בזה לעיתים –תכופות

4343

> echo $AA: Undefined variable.

> set A = 17> echo $A17

>echo AA

> set A = 777> echo $A777

> unset A> echo $AA: Undefined variable.

Page 44: תרגול 6

ערכים של משתנים

, שבה יש כמה Cלהבדיל משפת • CShellטיפוסים של משתנים, ב-

טיפוס אחדטיפוס אחדיש רק

יכול להכילCShellכל משתנה ב-•מספר שלםמספר שלם–מחרוזתמחרוזת–רשימהרשימה–

4444

> set A = 17> echo $A17

> set A = Matam> echo $AMatam

Page 45: תרגול 6

פעולות על משתנים מספריים

ניתן להשתמש במשתנים CShellב - •ולבצע מספרים שלמים מספרים שלמים המכילים

פשוטותפעולות חשבון פעולות חשבון עליהם

לשים לשים כדי לבצע פעולת חשבון חייבים •בתחילת השורהסימן @ סימן @

ברגע מוגדרמוגדר המשתנה @גם בשורות עם –פעם ראשונהפעם ראשונה בו ערך מציביםמציביםש

4545

> set i = 3> echo $i3

> @ i = $i + 1> echo $i4

> @ i ++> echo $i5

> echo $vv: Undefined variable.

> @ v = $i + 12> echo $v17

Page 46: תרגול 6

פעולות על משתנים מספריים - רווחים

לשים רווח לשים רווח שימו לב: יששימו לב: יש•אחרי @אחרי @–לפני ואחרי כל מספר או לפני ואחרי כל מספר או לרוב, –

משתנהמשתנהלא חייבים לפני ואחרי =•לא חייבים לפני ++,--•

4646

> @i++@i++: Command not found.

> @ j = 2+ $i@: Badly formed number.

> @ j = 2 +$i@: Variable name must begin with a letter.

> @ j = $i +2@: Variable name must begin with a letter.

> @ j = $i+ 2@: Badly formed number.

Page 47: תרגול 6

פעולות על משתנים מספריים

היא גם פעולת השמת מספר השמת מספר •חשבון - ניתן לבצע אותה עם

@סימן פעולת חשבון פעולת חשבון אם מפעילים •

- מקבלים שגיאה מחרוזתמחרוזתעל בפרט עם משתמשים ב-@ –

להצבת מחרוזת

4747

> @ i = 3> echo $i3

> set i = Matam> @ i++@: Expression Syntax.> @ set i = Matam@: Expression Syntax.

Page 48: תרגול 6

פעולות על משתנים מספריים

רק על רק על פעולות חשבון - •שלמיםשלמים

פעולת חשבון לא ניתן לשלב לא ניתן לשלב •עם פעולה אחרת

++, post ו-preאין משמעות ל-–Cכמו ב-

4848

> set i = 7> @ echo ($i + 2)@: Unknown operator.

> echo ($i + 2)(7+2)

> set i = 1.7> @ i++@: Badly formed number.

> @ j = $i++@: Badly formed number.> @ ++i@: Variable name must begin with a letter.

Page 49: תרגול 6

פעולות על משתנים מספריים - סוגריים

בסוגרייםבסוגרייםניתן להשתמש •בפעולות חשבון

האסוציאטיביות האסוציאטיביות שימו לב:•אינה סטנדרטיתאינה סטנדרטית

4949

> @ i = 2 - 3 + 4> echo $i-5

> @ i = (2 - 3) + 4> echo $i3

Page 50: תרגול 6

מחרוזות

, כל רצף של CShellב - •תווים נקרא מחרוזת,

אולם אם רוצים לעבוד עם מחרוזות המכילות

יותר ממילה אחת יותר ממילה אחת ( יש רווחיםרווחים)מכילות

גרשייםגרשייםלתחום אותן בין ""

5050

> set A = abc def ghi> echo $Aabc

> set A = "abc def ghi"> echo $Aabc def ghi

Page 51: תרגול 6

רשימות

, רשימהרשימה המכיל aעבור משתנה • i מציין את האיבר ה-a[i]a[i]הביטוי

ברשימהCבדומה למערך ב-–

האיברים מספורמספור -cshellב•--11מתחיל ממתחיל מ aברשימה

C, להבדיל מהמערכים ב-0ולא מ-–•cshell לא תומך ברשימות

מקוננות )רשימה בתוך רשימה(

> set v = (123 layla tov) > echo $v 123 layla tov > echo $v[2] layla> set v[2] = boker > echo $v 123 boker tov> echo $v[4]v: Subscript out of range.

5151

>set v[3] = (1 2 3)set: syntax error

Page 52: תרגול 6

פעולות על רשימות

מציין את מספר האיברים ברשימה{a$}#הביטוי • עבור המשתנים שהן לא רשומות1ערכו –

שלה על תת-רשימהתת-רשימה, ניתן לציין aבהינתן רשימה •ידי הביטויים הבאים:

a[m-n] n עד לאיבר ה-mמהאיבר ה-

a[-n] nמהאיבר הראשון עד לאיבר ה-

a[m-] עד לאיבר האחרוןmמהאיבר ה-

5252

> set a = ( aa bb cc dd ee )> echo $#a5>echo $a[3-]cc dd ee>echo $a[2-4]bb cc dd> echo $a[-3]aa bb cc

Page 53: תרגול 6

shiftפעולות על רשימות -

shift <list>shift <list>מקום אחד list >את כל איברי הרשימה > מזיזהמזיזה•

ומבטלת את האיבר הראשון.שמאלהשמאלה

> set v = ( go to the beach )> echo $v[1] go > shift v> echo $v[1]to> echo $vto the beach

5353

Page 54: תרגול 6

משתנים: נקודות נוספות

כל משתנהכל משתנהניתן להתייחס ל•רשימה בת רשימה בת כאל Cshellב-

איבר אחדאיבר אחד

מחרוזתמחרוזת בין הבדלהבדלשימו לב ל•רשימהרשימהל

5454

> set A = 17 > echo $A 17> echo $A[1]17>echo $#A1

> set A = " aa bb cc”> echo $A aa bb cc>echo $#A1> echo $A[1]aa bb cc> echo $A[2]v: Subscript out of range

> set A = (aa bb cc)> echo $A aa bb cc>echo $#A3> echo $A[1]aa> echo $A[2]bb

Page 55: תרגול 6

משתנים: נקודות נוספות

לרשימת לפרק מחרוזת לפרק מחרוזת ניתן •המילים המופיעות בה ע"י

השמת המחרוזת בתוך סוגריים.

בסוגריים בסוגריים ניתן להשתמש •מהו להדגישלהדגיש בכדי מסולסליםמסולסלים

של משתנה. שמושמולהצמיד להצמיד נחוץ כשאר רוצים –

לערך של משתנה מחרוזת מחרוזת

5555

> set A = " aa bb cc”> echo $A[1]aa bb cc>set A = ($A)> echo $A[1]aa

> set A = xxx> echo ${A}yyyxxxyyy> echo $AyyyAyyy: Undefined variable.

Page 56: תרגול 6

מנגנון ההיסטוריה

שבוצעו.לחזור על הפקודות לחזור על הפקודות מנגנון המאפשר •הפקודה האחרונההפקודה האחרונהאת מציין מציין - !!!!••!!gccgcc - ב- הפקודה האחרונה המתחילההפקודה האחרונה המתחילהאת מציין מציין gcc•historyhistory -שבוצעו. ניתן לקבוע רשימת הפקודות רשימת הפקודות את מדפיסמדפיס

"זוכר אחורה" על ידי shellאת מספר הפקודות אותן ה-historyקביעת ערכו של המשתנה

•<!<!nn>> - את הפקודה שמספרה מציין מצייןnברשימה מקשי מקשי מאפשר לבצע פקודות שבוצעו בעזרת shellבנוסף ה-•

)למעלה/למטה(החיצים החיצים

>set history=100100ל-מספר הפקודות הנזכרות מספר הפקודות הנזכרות הפקודה קובעת את •

5656

Page 57: תרגול 6

Command substitution

לשתול פקודה בתוך מחרוזת או לשתול פקודה בתוך מחרוזת או ניתן cshellב-•פקודה אחרתפקודה אחרת

`מקיפים את הפקודה הנשתלת בגרשיים הפוכים •backticksbackticksאו backquotesbackquotesהמכונים באנגלית–

•cshell אותה מחליףמחליףאת הפקודה הנשתלת ו מבצעמבצעביחד עם הגרשיים ההפוכים במה שהיא הדפיסה

> set A = “there are `ls | wc -l` files in `pwd` “> echo $Athere are 662 files in /usr/bin

5757

Page 58: תרגול 6

Command substitutionדוגמא

שמכיל רשימת קבצים farm_listבהינתן הקובץ •שמייצגים חוות

farm_listניתן לספור פרות בכל חווה שב-•בשורה אחת :

5858

farm1farm2

> grep -c cow `cat farms_list`farm1:3farm2:2

Page 59: תרגול 6

CShell אופן הפעולה של

•CShell עובד בלולאהעובד בלולאה :promptpromptהצגת –לפקודה המתנההמתנה– שלההביצועהביצוע בפקודה כולל טיפולטיפול–

מבני הנתונים מבני הנתונים מנהל את CShellלצורך עבודתו •הבאים:

רשימת ההיסטוריה–רשימת המשתנים –aliasesרשימת ה-–

5959

Page 60: תרגול 6

Cshellטיפול בפקודה :

: הפקודה מופרדת למילים. ניתוח הפקודהניתוח הפקודה1.1.משמשים כמפרידים בין מיליםTabהתווים רווח ו-

,|, <,> מפרידים בין פקודותnewlineהתווים

: ביצוע החלפות לקבלת פקודה עיבוד הפקודהעיבוד הפקודה2.2.פשוטה. מבוצעות החלפות היסטוריה, תבניות של

, משתנים וכד'aliasesשמות הקבצים,

: ביצוע הפקודה הפשוטה ביצוע הפקודהביצוע הפקודה3.3.שהתקבלה אחרי העיבוד

6060

Page 61: תרגול 6

עיבוד הפקודה

במידה והפקודה מכילה שימוש בפקודות קודמות )ע"י השמוש 1.. History Substitutionבסימן !( מתבצע

- שורת הפקודה שהתקבלה נשמרת ברשימת ההיסטוריה של הפקודות שבוצעו

alias מתבצע aliasאם המילה הראשונה בפקודה הנה שם של 2.substituion .

.variable substitutionביצוע 3.

.File name substitutionביצוע 4..5command substitution ה .back-quoted string) ... ( ` מוחלפת `

בתוצאת הפקודה

מבצעCShellבנוסף, .1I/O redirectionpipelineטיפול ב-2.

6161

Page 62: תרגול 6

History Substitution

כאשר מתבצעת החלפת ההיסטוריה, שורת •הפקודה )לאחר ההחלפה( מודפסת למסך

6262

>ls farm*farm1 farm2 farms_list> !!ls farm*farm1 farm2 farms_list

> echo AAAAAA> set last_command = "the last command was !!"set last_command = "the last command was echo AAA"> echo $last_commandthe last command was echo AAA

Page 63: תרגול 6

ביצוע הפקודה: סוגי הפקודה

•Cshell.מבצע את הפקודה בהתאם לסוג שלה ישנם שני סוגים של פקודות:CShellמבחינת • עצמו. פקודות אלה מבצעות CShell של (build-in) פקודות פנימיותפקודות פנימיות•

את משימות הבאות:(history)ניהול ההסטוריה ניהול ההסטוריה –( set/unset/shift) המשתניםהמשתניםרשימת ניהולניהול–aliasesaliases (alias/unalias) רשימת ה-ניהולניהול–(cd)התיקייה הנוכחית התיקייה הנוכחית שינוי –בקרת זרימה בתסריטים )בתרגול הבא(–ניהול תהליכים )בתרגול הבא(–

- כל פקודה שהיא לא פנימית. אלה יכולות להיותפקודות חיצוניות פקודות חיצוניות •תוכניות של משתמש–cat,ls,grepתוכניות שרות סטנדרטיות, כמו –

6363

Page 64: תרגול 6

ביצוע הפקודה: סוגי הפקודה

מבצע בעצמוCShellהפקודות הפנימיות הפקודות הפנימיות את • שולח למערכת CShellהפקודות החיצוניות הפקודות החיצוניות את •

ההפעלה לביצוע, יחד עם הארגומנטים שלהן•CShell שם שם חייב לשלוח למערכת ההפעלה את

:(full path name)המלא המלא כולל המסלול הפקודההפקודהשל הפקודה, השם המלא השם המלא אם המשתמש ציין את –

CShell כמו שהוא כמו שהוא אותו שולחשולחאם המשתמש ציין רק את השם של הפקודה )בלי –

בכל התיקיות יחפש את הפקודה יחפש את הפקודה CShellהמסלול(, pathpathהמופיעות ברשימה של המשתנה

6464

Page 65: תרגול 6

חיפוש הפקודה

כלשהיא על ידי למצוא פקודה למצוא פקודה CShellניתן לבקש מ-•wherewhereהפקודה

כך ניתן לדעת לפני ביצוע הפקודה–במערכת הקבצים קיימתקיימתהאם פקודה כלשהיא •אותהמצליח למצוא מצליח למצוא CShellהאם•נמצאתנמצאתהיא איפהאיפה•

ניתן להוסיף תיקיות לרשימת התיקיות לחיפוש •פקודות

mybin~/למשל הפקודה הבאה תוסיף את התיקיה –

> set path = ($path ~/mybin)

6565

> where cat/bin/cat> where cdcd is a shell built-in> where wherewhere is a shell built-in

Page 66: תרגול 6

סוגי גרשיים

(back quote)גרש הפוך גרש הפוך - ` ` command substitutionמשמש לצורך

(double quote)גרשיים כפולים גרשיים כפולים - "(single quote)גרש יחיד גרש יחיד - ' '

להתייחס למספר מילים )מופרדות ברווחים CShellמשמשים כדי לגרום ל-–וטאבים( כאל מילה אחת

גרשיים כפוליםגרשיים כפולים רק בתוךרק בתוךמתבצעת החלפת משתנים החלפת משתנים –

–command substitutioncommand substitution רק בתוך גרשיים כפוליםרק בתוך גרשיים כפוליםמתבצע`

6666

> set a = AAA> echo “the value of a is $a”the value of a is AAA> echo ' the value of a is $a 'the value of a is $a

> echo '`ls` '> `ls `

Page 67: תרגול 6

File name expansion גרשיים:

•File name expansion בתוך לא מתבצע לא מתבצעגרשיים בודדים או כפולים:

6767

> echo farm*farm1 farm2 farms_list> echo “farm* ”farm*> echo ' farm* 'farm*

Page 68: תרגול 6

Command Substitution: נקודותנוספות

•CShell ממה בונה רשימה בונה רשימה backticksשהפקודה בתוך ה-

מדפיסה.הרשימה נבנת בצורה הבאה:•

בתוך בתוך לאלא backticksאם ה-1. או תותו, רווחרווח, כל גרשיים כפוליםגרשיים כפולים

בין מעבר שורה מפריד מעבר שורה מפריד סימן האיברים ברשימה

בתוך גרשיים בתוך גרשיים backticksאם ה-2.רק סימן מעבר שורה רק סימן מעבר שורה , כפוליםכפוליםבין האיברים ברשימהמפריד מפריד

6868

> cat linesa bc d> set A = `cat lines`> echo $#A4> echo $A[1]a> echo $A[2]b> set A = "`cat lines`"> echo $#A2> echo $A[1]a b> echo $A[2]c d