Download ppt - תרגול מס' 7

Transcript
Page 1: תרגול מס' 7

77תרגול מס' תרגול מס'

-תוכניות סטנדרטיות ב-תוכניות סטנדרטיות בUNIXUNIXC-ShellC-Shell

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

Page 2: תרגול מס' 7

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

בכל מחשב אשר מותקנת בו מערכת הפעלה בכל מחשב אשר מותקנת בו מערכת הפעלה מותקנות בנוסף מספר תוכנות מותקנות בנוסף מספר תוכנות UnixUnixמסוג מסוג

סטנדרטיות אשר ניתן להיעזר בהןסטנדרטיות אשר ניתן להיעזר בהןניראה מספר תוכניות ודרכים לשלב בינהןניראה מספר תוכניות ודרכים לשלב בינהן

Page 3: תרגול מס' 7

קבלת רשימת הקבצים במדריךקבלת רשימת הקבצים במדריך הפקודה הפקודהlsls

מדפיסה את רשימת הקבצים הנמצאים במדריך הנוכחי.מדפיסה את רשימת הקבצים הנמצאים במדריך הנוכחי.

אפשרויות נוספות:אפשרויות נוספות:lsls <directory name <directory name<<

מדפיסה את רשימת הקבצים הנמצאים בתת המדריך. מדפיסה את רשימת הקבצים הנמצאים בתת המדריך.

הפקודה הפקודהlsls עם הדגל עם הדגל --llמאפשרת לראות את רשימת הקבצים במדריך הנוכחי באופן מפורט יותרמאפשרת לראות את רשימת הקבצים במדריך הנוכחי באופן מפורט יותר

הפקודה הפקודהlsls עם הדגל עם הדגל --aaמאפשרת לראות בנוסף גם קבצים נסתרים )קבצים ששמם מתחיל ב"." – מאפשרת לראות בנוסף גם קבצים נסתרים )קבצים ששמם מתחיל ב"." –

בד"כ קבצי אתחול לתוכניות שונות(בד"כ קבצי אתחול לתוכניות שונות(

> ls> lsprogsprogs

> ls progs> ls progshellohello

> ls -l> ls -ltotal 7 total 7 -rw-r--r-- 1 ari 2425 Mar 12 11:59 moshe-rw-r--r-- 1 ari 2425 Mar 12 11:59 moshedrwx------ 2 ari 512 May 13 03:30 progsdrwx------ 2 ari 512 May 13 03:30 progs

> ls -a> ls -a. . .. .cshrc.cshrc .login.loginmoshemoshe progs progs

Page 4: תרגול מס' 7

סקירת תוכן קבציםסקירת תוכן קבצים הפקודה הפקודהcatcat

>cat file_1 file_2 … file_k >cat file_1 file_2 … file_k לפלט הסטנדרטי לפלט הסטנדרטיfile_1,file_2,…,file_kfile_1,file_2,…,file_kמדפיסה את תוכן הקבצים מדפיסה את תוכן הקבצים

הפקודה הפקודהhead head [-[-nn] [] [filesfiles]]מדפיסה רק מספר מהשורות הראשונות של קובץ. מדפיסה רק מספר מהשורות הראשונות של קובץ.

(.(.1010 מהשורות הראשונות )ברירת המחדל היא מהשורות הראשונות )ברירת המחדל היא nn מאפשרת להדפיס מאפשרת להדפיס nn--האופציה האופציה >head -20 phone>head -20 phone

phonephone השורות הראשונות בקובץ השורות הראשונות בקובץ 2020 את את ידפיס

הפקודההפקודה tail tail [[optionsoptions] [] [filesfiles]] מדפיסה רק מספר מהשורות האחרונות של קובץ מדפיסה רק מספר מהשורות האחרונות של קובץ

השורות האחרונות בקובץ )ברירת המחדל היא השורות האחרונות בקובץ )ברירת המחדל היא nnמאפשרת להדפיס את מאפשרת להדפיס את nn--האופציה האופציה -- nn ה ה החל מהשורההחל מהשורה מאפשרת להדפיס את כל השורות האחרונות מאפשרת להדפיס את כל השורות האחרונות nn++(. האופציה (. האופציה 1010

ית בקובץ.ית בקובץ.

Page 5: תרגול מס' 7

שילוב תוכניותשילוב תוכניות נרצה להדפיס את השורות השניה והשלישית של קובץ בשם נרצה להדפיס את השורות השניה והשלישית של קובץ בשם

myfilemyfile

יצרנו קובץ זמני בשם יצרנו קובץ זמני בשםfirst3first3אשר נידרש למחקו אח"כ אשר נידרש למחקו אח"כ נראה דרך פשוטה יותר לביצוע משימה זו של הפניית פלט של נראה דרך פשוטה יותר לביצוע משימה זו של הפניית פלט של

– – pipeliningpipeliningתוכנית אחת לקלט של התוכנית הבאה ע"י שמוש ב תוכנית אחת לקלט של התוכנית הבאה ע"י שמוש ב העברה ישירה של פלט של תוכנית אחת לקלט של תוכנית אחרת העברה ישירה של פלט של תוכנית אחת לקלט של תוכנית אחרת

> head –3 < myfile > first3> head –3 < myfile > first3> tail –2 < first3> tail –2 < first3

Page 6: תרגול מס' 7

PipeliningPipelining

<program1> <program1> || <program2> <program2> program2program2 לוקחת כקלט את הפלט של לוקחת כקלט את הפלט של program1program1 ניתן לבצע שרשור מסוג זה . ניתן לבצע שרשור מסוג זה .

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

> cat myfile | head –3 | tail –> cat myfile | head –3 | tail –22

>ls>lsaaaaaa bbbbbb cccccc dddddd>ls | head –3>ls | head –3aaaaaabbbbbbcccccc

Page 7: תרגול מס' 7

teeteeהפקודההפקודה teetee [ [optionsoptions] [] [filesfiles] ]

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

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

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

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

:אופציות נוספות:אופציות נוספות האופציה האופציה--aa מאפשרת שרשור של הפלט לסוף הקבצים מאפשרת שרשור של הפלט לסוף הקבצים ]]filesfiles[[.במקום מחיקתם. במקום מחיקתם

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

Page 8: תרגול מס' 7

sortsortהפקודההפקודה sortsort [ [optionsoptions] [] [filesfiles]]

ממיינת את שורות הקבצים ממיינת את שורות הקבצים]]filesfiles[[.בדרך כלל בסדר א"ב., בדרך כלל בסדר א"ב ,

:אופציות נוספות:אופציות נוספות--bbהתעלם מרווחים בתחילת השורה התעלם מרווחים בתחילת השורה --dd)מבצע מיון בסדר מילוני )מתעלם מפיסוק( מבצע מיון בסדר מילוני )מתעלם מפיסוק --ffמתעלם מהבדלי מתעלם מהבדלי uppercase/lowercaseuppercase/lowercase --mm ממזג מספר קבצים שכבר מויינו לקובץ אחד )יותר יעיל מאשר למיין אותם ממזג מספר קבצים שכבר מויינו לקובץ אחד )יותר יעיל מאשר למיין אותם

שוב אם הם כבר ממויינים(.שוב אם הם כבר ממויינים(.--nn.משווה על פי ערך מספרי. משווה על פי ערך מספרי --oofilefile מדפיס את הפלט לקובץ מדפיס את הפלט לקובץfilefile..--rr.הופך את סדר המיון. הופך את סדר המיון uu--שורות זהות תופענה בפלט פעם אחת בלבד שורות זהות תופענה בפלט פעם אחת בלבד ..++nn לפני ביצוע המיון דלג על לפני ביצוע המיון דלג על nn.המילים הראשונות. המילים הראשונות

Page 9: תרגול מס' 7

הפקודההפקודהsortsortדוגמאותדוגמאות - - > cat data > cat data WorldWorldwhouldwhouldforforFaterFater> sort data> sort dataFaterFaterWorldWorldforforwhouldwhould> sort data -f> sort data -fFaterFaterforforwhouldwhouldWorldWorld> sort data -r> sort data -rwhouldwhouldforforWorldWorldFaterFater

> ls -l> ls -ltotal 6total 6-rw------- 1 romano root 23 Nov 8 23:09 data-rw------- 1 romano root 23 Nov 8 23:09 data-rw------- 1 romano 368 243 Nov 8 23:12 ex1-rw------- 1 romano 368 243 Nov 8 23:12 ex1-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 0 Nov 10 13:30 ex3-rw------- 1 romano 368 0 Nov 10 13:30 ex3> > ls -l | sort +4 > lsdatals -l | sort +4 > lsdata> more lsdata> more lsdatatotal 6total 6-rw------- 1 romano 368 0 Nov 10 13:30 ex3-rw------- 1 romano 368 0 Nov 10 13:30 ex3-rw------- 1 romano root 0 Nov 10 13:31 lsdata-rw------- 1 romano root 0 Nov 10 13:31 lsdata-rw------- 1 romano root 23 Nov 8 23:09 data-rw------- 1 romano root 23 Nov 8 23:09 data-rw------- 1 romano 368 243 Nov 8 23:12 ex1-rw------- 1 romano 368 243 Nov 8 23:12 ex1-rw------- 1 romano 368 428 Nov 8 23:22 ex2-rw------- 1 romano 368 428 Nov 8 23:22 ex2>>

Page 10: תרגול מס' 7

grepgrepהפקודההפקודה grepgrep [ [optionsoptions] [^]] [^]wordword [ [filesfiles]]

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

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

>grep "It is" file>grep "It is" file:אפשרויות נוספות:אפשרויות נוספות--ccהדפס רק את מספר השורות שנמצאו הדפס רק את מספר השורות שנמצאו --hhהדפס את השורות עצמן ללא שמות הקבצים, בהם השורות נמצאו הדפס את השורות עצמן ללא שמות הקבצים, בהם השורות נמצאו --ii התעלם מהבדלי התעלם מהבדלי uppercase/lowercaseuppercase/lowercase--ll הדפס רק את שמות הקבצים בהם השורות נמצאו ללא הדפסת השורות הדפס רק את שמות הקבצים בהם השורות נמצאו ללא הדפסת השורות

עצמןעצמן--nnהדפס את השורות ואת מספרן בקבצים הדפס את השורות ואת מספרן בקבצים --vv לא מופיעהלא מופיעההדפס את כל השורות, בהן הדפס את כל השורות, בהן wordword--ww הדפס את כל השורות בהן מופיעה הדפס את כל השורות בהן מופיעהwordword)בדיוק )לא כתת מחרוזת( בדיוק )לא כתת מחרוזת ^̂wordword הדפס את כל השורות המתחילות ב - הדפס את כל השורות המתחילות ב -wordword

Page 11: תרגול מס' 7

הפקודההפקודהgrepgrepדוגמאותדוגמאות - - > lsex/ ex2 ex4 file2~ex1 ex3 file1~> ls | grep exex/ex1ex2ex3ex4> ls | grep -c ex5

> more file1Arik !Have you heard news ?If not , listen !> cat file2Tomorrow we have a new exam !So we cannot go to Ran's birthday .By .> grep -v -n new * | sort | head -3file1:1:Arik !file1:3:If not , listen !file2:2:So we cannot go to Ran's birthday .

> lsfile1 file2 typescript> cat file1 file2Arik !Have you heard news ?If not , listen !Tomorrow we have a new exam !So we cannot go to Ran's birthday .By .> cat file2 file1 | grep new | sort -d –onews> more newsHave you heard news ?Tomorrow we have a new exam !

Page 12: תרגול מס' 7

uniquniqהפקודההפקודה uniq [uniq [optionsoptions] [] [file1file1 [ [file2file2]]]]

מורידה מהקובץ הממוין מורידה מהקובץ הממויןfile1file1 את כל השורות הזהות הסמוכות, ושולחת את כל השורות הזהות הסמוכות, ושולחת , לערוץ הפלט , לערוץ הפלט file2file2 )או בהעדר הקובץ )או בהעדר הקובץ file2file2עותק אחד של כל שורה לקובץ עותק אחד של כל שורה לקובץ

הסטנדרטי(.הסטנדרטי(.

:אפשרויות נוספות:אפשרויות נוספות--cc.הדפס כל שורה פעם אחת בלבד וספור עותקים של כל שורה. הדפס כל שורה פעם אחת בלבד וספור עותקים של כל שורה --dd הדפס שורות המופיעות יותר מפעם אחת, אך לא שורות המופיעות פעם הדפס שורות המופיעות יותר מפעם אחת, אך לא שורות המופיעות פעם

אחת בלבד.אחת בלבד.--uu.הדפס רק את השורות המופיעות פעם אחת בדיוק. הדפס רק את השורות המופיעות פעם אחת בדיוק --nn-התעלם מ- התעלם מ nn המילים הראשונות )לפני קבלת ההחלטה אם שתי מילים המילים הראשונות )לפני קבלת ההחלטה אם שתי מילים

זהות(זהות(

הערה: השתמש בו זמנית רק באחת משלוש האופציות הראשונותהערה: השתמש בו זמנית רק באחת משלוש האופציות הראשונות

Page 13: תרגול מס' 7

הפקודההפקודהuniquniqדוגמאותדוגמאות - - > more file3> more file3oneonetwotwotwotwothreethreethreethreethreethree> uniq file3 list> uniq file3 list> more list> more listoneonetwotwothreethree> >

> more names> more namesUriUriDanDanUriUriElenaElenaAlexAlexOfraOfraUriUriOfraOfra> sort names | uniq -d> sort names | uniq -dOfraOfraUriUri> >

Page 14: תרגול מס' 7

cutcutהפקודההפקודה cutcut optionsoptions [ [filesfiles]]

בוחרת תווים או שדות רצוים מכל אחת מהשורות בוחרת תווים או שדות רצוים מכל אחת מהשורות cutcutהפקודה הפקודה ..filesfilesמקבצי הקלט מקבצי הקלט

:אפשרויות נוספות:אפשרויות נוספות --c c listlist מאפשר לבחור תו מסויים או קבוצת תוים מתוך שורה מאפשר לבחור תו מסויים או קבוצת תוים מתוך שורה

מופיעים המספרים של התוים הרצוים מופיעים המספרים של התוים הרצויםlistlistמסויימת, כאשר ב - מסויימת, כאשר ב - --f f listlist מאפשר לבחור שדה או קבוצת שדות מתוך שורה מאפשר לבחור שדה או קבוצת שדות מתוך שורה

מופיעים המספרים של השדות מופיעים המספרים של השדות listlistמסויימת, כאשר ב - מסויימת, כאשר ב - הרצויםהרצוים

--d”cd”c”” משמשת בנוסף לאופציה משמשת בנוסף לאופציה --ff מאפשרת לקבוע מי התו . מאפשרת לקבוע מי התו . המפריד בין השדות. שדה הינה קבוצת תווים המסתיימת בתו המפריד בין השדות. שדה הינה קבוצת תווים המסתיימת בתו

cc ברירת המחדל היא התו . ברירת המחדל היא התו .>>tabtab<<

Page 15: תרגול מס' 7

הפקודההפקודהcutcutדוגמאותדוגמאות - - > cat file1> cat file1a11 a12 a13 a14 a15a11 a12 a13 a14 a15b21 b22 b23 b24 b25b21 b22 b23 b24 b25c31 c32 c33 c34 c35c31 c32 c33 c34 c35> cut -c1-3,5,8-10 file1> cut -c1-3,5,8-10 file1a11a a1a11a a1b21b b2b21b b2c31c c3c31c c3> cut -d" " -f2,4 file1> cut -d" " -f2,4 file1a12 a14a12 a14b22 b24b22 b24c32 c34c32 c34

במידה וקיים התו המפריד בשורה אך ניתן מספר שדה שאינו קיים אזי תתקבל שורה ריקה,במידה וקיים התו המפריד בשורה אך ניתן מספר שדה שאינו קיים אזי תתקבל שורה ריקה,אולם אם התו המפריד לא קיים בשורה, תודפס כל השורה.אולם אם התו המפריד לא קיים בשורה, תודפס כל השורה.

> cat file2> cat file2a11:a12:a13 a11:a12:a13 b21:b22 b21:b22 c31 c32 c33 c31 c32 c33 > cat file2 | cut -d":" –f1 > cat file2 | cut -d":" –f1 a11a11b21 b21 c31 c32 c33 c31 c32 c33 > cat file2 | cut -d":" –f3 > cat file2 | cut -d":" –f3 a13 a13 c31 c32 c33 c31 c32 c33

Page 16: תרגול מס' 7

wcwcהפקודההפקודה

wc wc [[optionsoptions] [] [filesfiles]]מאפשרת הדפסת ספירת מספר התוים, המילים או השורות בקבצים שוניםמאפשרת הדפסת ספירת מספר התוים, המילים או השורות בקבצים שונים

נוספות:נוספות: אפשרויותאפשרויות--cc.הדפס את מספר התוים בלבד. הדפס את מספר התוים בלבד --ll.הדפס את מספר השורות בלבד. הדפס את מספר השורות בלבד --ww.הדפס את מספר המילים בלבד. הדפס את מספר המילים בלבד

Page 17: תרגול מס' 7

הפקודההפקודהwcwcדוגמאותדוגמאות - - > wc -l phonebook> wc -l phonebook12 phonebook12 phonebook> wc -w bible> wc -w bible333333 bible333333 bible> wc -c data> wc -c data8843 data8843 data

אם לא ניתנת אופציה ניתן הפלט בפורמט :אם לא ניתנת אופציה ניתן הפלט בפורמט : #> #>lines> <# words> <# chars> filenamelines> <# words> <# chars> filename

<<wc datawc data<<193 1808 8843 data193 1808 8843 data

אם ניתנים כמה שמות קבצים מופיע גם סיכום:אם ניתנים כמה שמות קבצים מופיע גם סיכום:> wc data phonebook> wc data phonebook193 193 1808 1808 8843 data8843 data12 12 100 100 654 phonebook 654 phonebook 295 295 1908 1908 9497 total9497 total

Page 18: תרגול מס' 7

printfprintfהפקודההפקודה

printfprintf format stringsformat strings

..formatformat לפי הפורמט לפי הפורמט stringstringמדפיסה את המחרוזת מדפיסה את המחרוזת הפורמט יכול להכיל תווים רגילים או תווי עריכה. הפורמט יכול להכיל תווים רגילים או תווי עריכה.

:דוגמאות של תווי עריכה:דוגמאות של תווי עריכה%%ss מדפיסה את המחרוזת המתאימה מתוך הרשימה - מדפיסה את המחרוזת המתאימה מתוך הרשימה -

stringsstrings..[-]% -[-]% -m[.n]sm[.n]s מדפיסה את המחרוזת המתאימה מרשימת מדפיסה את המחרוזת המתאימה מרשימת

תווים, אם תווים, אם mmהמחרוזות כך שהתוצאה תהיה באורך של המחרוזות כך שהתוצאה תהיה באורך של אפשרות להגבלת מספר התווים המודפסים )מתוך אפשרות להגבלת מספר התווים המודפסים )מתוך

. המחרוזת מיושרת לימין אלא . המחרוזת מיושרת לימין אלא nnהמחרוזת הספציפית( ל - המחרוזת הספציפית( ל - אם כן משתמשים באופרטור -.אם כן משתמשים באופרטור -.

Page 19: תרגול מס' 7

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

שמו לב מה קורה כאשר ישנן יותר מחרוזות ברשימה שמו לב מה קורה כאשר ישנן יותר מחרוזות ברשימהstringsstrings מאשר תווי עריכה מאשר תווי עריכה %(%(ss))

> echo $HOME> echo $HOME/home/rotics/home/rotics> printf “My files are in %s\n“ $HOME> printf “My files are in %s\n“ $HOMEMy files are in /home/roticsMy files are in /home/rotics> printf “number is : %10.5s” 123456789a> printf “number is : %10.5s” 123456789anumber is: 12345number is: 12345> printf “number is : #%-10.3s# %s\n” "123456789a" xxx> printf “number is : #%-10.3s# %s\n” "123456789a" xxxnumber is: #123 # xxxnumber is: #123 # xxx> printf “My files are in %s\n“ $HOME “my PC”> printf “My files are in %s\n“ $HOME “my PC”My files are in /home/roticsMy files are in /home/roticsMy files are in my PCMy files are in my PC

Page 20: תרגול מס' 7

CSHELLCSHELL במערכת ההפעלה במערכת ההפעלהUnixUnixיש רכיב תוכנה שתפקידו לשמש מנשק יש רכיב תוכנה שתפקידו לשמש מנשק

shellshellבין המשתמש למערכת ההפעלה. שמו של רכיב זה הוא בין המשתמש למערכת ההפעלה. שמו של רכיב זה הוא תפקידו של ה תפקידו של הShellShell הנו לקיים את הקשר עם המשתמש ולקבל ממנו את הנו לקיים את הקשר עם המשתמש ולקבל ממנו את

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

הקשר עם המשתמש מתבצע ע"י ה הקשר עם המשתמש מתבצע ע"י הpromptprompt מיד לאחר ביצוע ה מיד לאחר ביצוע הloginlogin מוצג מוצג promptprompt לדוגמא < (. ה )לדוגמא < (. ה( promptprompt מהווה מהווה

שהינו מוכן לבצע פקודה של המשתמש שהינו מוכן לבצע פקודה של המשתמשshellshellסימן של ה-סימן של ה--לאחר שהמשתמש כותב את הפקודה, ה-לאחר שהמשתמש כותב את הפקודה, הshellshell מנתחה, ומעבירה למערכת מנתחה, ומעבירה למערכת

מציג את ה מציג את ה shellshellההפעלה לביצוע. לאחר שהפקודה סיימה להתבצע ה ההפעלה לביצוע. לאחר שהפקודה סיימה להתבצע ה promptpromptומוכן לקבל את הפקודה הבאה ומוכן לקבל את הפקודה הבאה

> echo hello> echo hellohellohello<<

מערכת ההפעלהמערכת ההפעלהמשתמשמשתמש ShellShell

Page 21: תרגול מס' 7

Shells in UNIXShells in UNIX ה הShellShell הנה תוכנית ככל תוכנית. קיימות ב הנה תוכנית ככל תוכנית. קיימות ב UnixUnix

שונות. כולן מבצעות את אותה שונות. כולן מבצעות את אותה shellshellמספר תוכניות מספר תוכניות משימה, אך מספקות קישור ב"גוונים שונים" משימה, אך מספקות קישור ב"גוונים שונים"

המאפשרים למשתמש לקבל סביבת מחשב שונה המאפשרים למשתמש לקבל סביבת מחשב שונה לבחירתו. לבחירתו.

ישנם מספר ישנם מספרshellsshells נפוצים ב נפוצים ב UnixUnix: : cshellcshell, , kshellkshell, , bourne shellbourne shell .ועוד. ועוד

אנו נלמד על ה אנו נלמד על הcshellcshell שהנו אחד ה שהנו אחד ה shellshell.הפופולרים. הפופולרים

Page 22: תרגול מס' 7

SHELLSHELLתפקידיו של התפקידיו של ה-- תפקידו של ה תפקידו של הShellShellהנו לבצע את הקשר עם המשתמש הנו לבצע את הקשר עם המשתמש -ה- הshellshell:מבצע את תפקידו בשתי דרכים: מבצע את תפקידו בשתי דרכים ה- ה-–– אינטראקטיביתאינטראקטיבית shellshell מקבל פקודה מהמשתמש ומעבירה למערכת מקבל פקודה מהמשתמש ומעבירה למערכת

מאפשר למשתמש לבצע "קיצורי מאפשר למשתמש לבצע "קיצורי shellshellההפעלה לביצוע. באופן עבודה זה, ה-ההפעלה לביצוע. באופן עבודה זה, ה-דרך" :דרך" :

AliasAlias- - הגדרת שמות קצרים לפקודות שהמשתמש מבצע פעמים רבות הגדרת שמות קצרים לפקודות שהמשתמש מבצע פעמים רבות HistoryHistory- - זכירת הפקודות שהמשתמש ביצע בעבר ואפשור ביצוע מהיר שלהן ללא זכירת הפקודות שהמשתמש ביצע בעבר ואפשור ביצוע מהיר שלהן ללא

צורך בהקלדתן מחדשצורך בהקלדתן מחדשFile name expansionFile name expansion- - אפשרות להתייחס למספר קבצים בקיצור אפשרות להתייחס למספר קבצים בקיצור - הגדרה ושימוש במשתנים הגדרה ושימוש במשתניםמשתנים -משתנים

תסריטתסריט ((scriptscript– )– ) ה הshellshell מאפשר לשמור סדרת פקודות בקובץ ומאפשר מאפשר לשמור סדרת פקודות בקובץ ומאפשר למשתמש להריץ קובץ זה. הרצת קובץ זה תתבצע "כאילו" המשתמש הקיש למשתמש להריץ קובץ זה. הרצת קובץ זה תתבצע "כאילו" המשתמש הקיש

מבני מבני מספק שפה פשוטה הכוללת משתנים ו מספק שפה פשוטה הכוללת משתנים וshellshellפקודה אחר פקודה. ה פקודה אחר פקודה. ה , המאפשרים כתיבת תסריטים "אינטליגנטיים". היתרון בכתיבת תסריט , המאפשרים כתיבת תסריטים "אינטליגנטיים". היתרון בכתיבת תסריט בקרהבקרה

לדוגמא, הנו היכולת הקלה להשתמש בתוכניות שכבר לדוגמא, הנו היכולת הקלה להשתמש בתוכניות שכבר CCעל פני תוכנית ב-על פני תוכנית ב-נכתבו וקיימות במערכתנכתבו וקיימות במערכת

Page 23: תרגול מס' 7

Command AliasesCommand Aliasesalias <new name> <command name>alias <new name> <command name>

נותן את השם נותן את השםnew namenew name לפקודה לפקודה command namecommand name

> alias del rm> alias del rm> del file2> del file2

פקודות אלו מוחקות את הקובץ פקודות אלו מוחקות את הקובץfile2file2..aliasalias מציגה את כל ה - מציגה את כל ה - aliasesaliases לדוגמא, נניח כי רק ה . לדוגמא, נניח כי רק ה .aliasalias:הנ"ל הוגדר: הנ"ל הוגדר

> alias> aliasdeldel rm rm

:דוגמא נוספת:דוגמא נוספתalias cdex2 "cd ~mtm/public/alias cdex2 "cd ~mtm/public/05060506b/ex2" b/ex2"

Page 24: תרגול מס' 7

historyhistoryמכניזם לחזור על פקודות קודמותמכניזם לחזור על פקודות קודמות

!!!!יבצע שוב את הפקודה האחרונה - יבצע שוב את הפקודה האחרונה - !!vivi -יבצע שוב את הפקודה האחרונה המתחילה ב- - יבצע שוב את הפקודה האחרונה המתחילה ב - vivihistoryhistory מציג את רשימת הפקודות ברשימה. ניתן לקבוע את - מציג את רשימת הפקודות ברשימה. ניתן לקבוע את -

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

>!>!nn<< יבצע שוב את הפקודה שמספרה - יבצע שוב את הפקודה שמספרה - nnברשימה ברשימה -בנוסף ה-בנוסף הShellShell מאפשר לבצע פקודות הנשמרות בהיסטוריה מאפשר לבצע פקודות הנשמרות בהיסטוריה

בעזרת מקשי החיציםבעזרת מקשי החיצים

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

Page 25: תרגול מס' 7

FileFile name expansionsname expansions-רב הפקודות ב-רב הפקודות בUNIXUNIX מקבלות שמות של קבצים, לכן מקבלות שמות של קבצים, לכן

מספק מנגנון מקל בכתיבתם. הפקודה מספק מנגנון מקל בכתיבתם. הפקודה ShellShellה-ה-מרחיב את מרחיב את ShellShell מכילה תבנית במקום שם קובץ, ה-מכילה תבנית במקום שם קובץ, ה-

הביטוי בהתאםהביטוי בהתאם את התבנית בונים בעזרת תווים הנקראים את התבנית בונים בעזרת תווים הנקראיםWildcardsWildcards

** מתאים לכל מחרוזת תווים באורך אפס או יותרמתאים לכל מחרוזת תווים באורך אפס או יותר?? מתאים לכל תו בודד אחדמתאים לכל תו בודד אחד[][] [ -ל ] מתאים לכל אחד מהתווים בין [ ל- ]מתאים לכל אחד מהתווים ביןa[rxz]b -> arb, axb, azb

Page 26: תרגול מס' 7

FileFile name expansionsname expansionsדוגמאותדוגמאות

*.c *.c ccכל הקבצים עם סיומת כל הקבצים עם סיומת

*AD* *AD* ADADקבצים שבשמותיהם צירוף האותיות קבצים שבשמותיהם צירוף האותיות

> gcc -c *.c> gcc -c *.ccc..תקמפל את כל הקבצים עם הסיומת תקמפל את כל הקבצים עם הסיומת

<<rm prog1.?rm prog1.? ולאחר מכן יש בדיוק תו אחד ולאחר מכן יש בדיוק תו אחד..prog1prog1תמחק את כל הקבצים שמתחילים ב-תמחק את כל הקבצים שמתחילים ב-

file[13]file[13] 11 ושאחרי אותיות אלו מופיע או ושאחרי אותיות אלו מופיע או filefileמציין את כל הקבצים ששמותיהם מתחילים ב- מציין את כל הקבצים ששמותיהם מתחילים ב-

..33או או file[A-Za-z13]file[A-Za-z13]

ושאחרי אותיות אלו מופיעה ושאחרי אותיות אלו מופיעה filefileמציין את כל הקבצים ששמותיהם מתחילים ב- מציין את כל הקבצים ששמותיהם מתחילים ב- ..33 או או 11אחת מאותיות ה-א"ב האנגלי או אחת מהספרות אחת מאותיות ה-א"ב האנגלי או אחת מהספרות

Page 27: תרגול מס' 7

משתניםמשתניםsetset <variable> = <value> <variable> = <value>

מגדירה כי קיים משתנה בשםמגדירה כי קיים משתנה בשםvariablevariable -וקובעת את ערכו ל- וקובעת את ערכו ל valuevalue..ValueValue יכל להיות יכל להיות

שלמיםשלמיםמספרים מספריםמחרוזתמחרוזת רשימה של מחרוזות ומספרים רשימה של מחרוזות ומספרים

אין צורך להכריז על משתני אין צורך להכריז על משתניcshellcshell .המשתנים מוגדרים ברגע שמציבים להם ערכים. : המשתנים מוגדרים ברגע שמציבים להם ערכים :בכדי לקבל את ערכו של המשתנה יש להשתמש בבכדי לקבל את ערכו של המשתנה יש להשתמש ב-- $ $

$$<variable><variable> מחזיר את ערך המשתנה מחזיר את ערך המשתנהvariablevariable

> set v = abc> set v = abc> echo $v> echo $vabcabc> set v = 123 > set v = 123 > echo $v> echo $v123 123

Page 28: תרגול מס' 7

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

עליהם פעולות חשבון פשוטותעליהם פעולות חשבון פשוטות' בתחילת פקודה מסמן לחשב את הביטוי המספרי בפקודה. ' בתחילת פקודה מסמן לחשב את הביטוי המספרי בפקודה. @@הסימן 'הסימן '

במידה ורוצים לאתחל את ערכו של משתנה לקבוע ניתן להעזר בפקודה במידה ורוצים לאתחל את ערכו של משתנה לקבוע ניתן להעזר בפקודה setset אולם בכדי לבצע פעולות חשבוניות חייבים להשתמש ב . אולם בכדי לבצע פעולות חשבוניות חייבים להשתמש ב .@@

:שימו לב:שימו לב' ולפני הפקודה' ולפני הפקודה@@יש לשים רווח אחרי 'יש לשים רווח אחרי ' ולא - ולא 55 הנו הנו 2-3+42-3+4האסוציאטיביות אינה סטנדרטית. לדוגמא ערך הבטוי האסוציאטיביות אינה סטנדרטית. לדוגמא ערך הבטוי -

כפי שניתן היה לצפות כפי שניתן היה לצפות33

> @ i = 3> @ i = 3> echo $i> echo $i33> @ i = $i + 1> @ i = $i + 1> echo $i> echo $i44> @ i ++> @ i ++> echo $i> echo $i55> set v = 12> set v = 12> @ v = $v + $i> @ v = $v + $i> echo $v> echo $v1717

Page 29: תרגול מס' 7

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

לעבוד עם מחרוזות המכילות יותר ממילה אחת )מכילות לעבוד עם מחרוזות המכילות יותר ממילה אחת )מכילות (. (.""רווחים( יש לתחום אותן בין גרשיים ) רווחים( יש לתחום אותן בין גרשיים )

> set a = "abc def ghe"> set a = "abc def ghe"> echo $a> echo $a

abc def gheabc def gheשימו לב כי למרות שהמילה מכילה רווחים זו עדיין מילה אחתשימו לב כי למרות שהמילה מכילה רווחים זו עדיין מילה אחת

Page 30: תרגול מס' 7

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

aaברשימת הערכים ברשימת הערכים בבcshellcshell-- מספור האיברים ברשימה מספור האיברים ברשימה aa (.(.--00 )ולא מ )ולא מ--11 מתחיל מ מתחיל מ

cshellcshell :לא תומך ברשימות מקוננות )רשימה בתוך רשימה( ולכן על הפקודה: לא תומך ברשימות מקוננות )רשימה בתוך רשימה( ולכן על הפקודה > set v[3] = )12 abc 34( > set v[3] = )12 abc 34(

נקבל שגיאה:נקבל שגיאה:set: syntax errorset: syntax error

> set v = )123 def ghi(> set v = )123 def ghi( > echo $v> echo $v 123 def ghi123 def ghi > echo $v[2]> echo $v[2] defdef > set v[3] = ww> set v[3] = ww > echo $v> echo $v 123 def ww123 def ww

Page 31: תרגול מס' 7

פעולות על רשימותפעולות על רשימות המכיל רשימה של ערכים, המכיל רשימה של ערכים, aaעבור משתנה עבור משתנה

הביטוי הביטוי#{$#{$aa}}מציין את מספר האיברים ברשימה מציין את מספר האיברים ברשימה הביטוי הביטויa[m-n]a[m-n] -מציין את תת-הרשימה, מהאיבר ה- מציין את תת-הרשימה, מהאיבר ה mm עד לאיבר עד לאיבר

nnה- ה- הביטוי הביטויa[-n]a[-n] מציין את תת-הרשימה, מהאיבר הראשון עד לאיבר מציין את תת-הרשימה, מהאיבר הראשון עד לאיבר

--nnהה הביטוי הביטויa[m-]a[m-]-מציין את תת-הרשימה, מהאיבר ה- מציין את תת-הרשימה, מהאיבר ה mm עד לסוף עד לסוף

הרשימההרשימה הביטוי הביטויaa[*][*]מציין את הקבוצה המורכבת מכל איברי הרשימה מציין את הקבוצה המורכבת מכל איברי הרשימה

Page 32: תרגול מס' 7

רשימות - דוגמאותרשימות - דוגמאות> set a = ) aa bb cc dd ee (> set a = ) aa bb cc dd ee (> echo $#a> echo $#a55>echo $a[3-]>echo $a[3-]cc dd eecc dd ee>echo $a[2-4]>echo $a[2-4]bb cc ddbb cc dd> echo $a[-3]> echo $a[-3]aa bb ccaa bb cc

מזיזה את כל איברי הרשימה מקום אחד מזיזה את כל איברי הרשימה מקום אחד shiftshift a a, הפעולה , הפעולה aaעבור רשימת ערכים עבור רשימת ערכים שמאלה ומבטלת את האיבר הראשון.שמאלה ומבטלת את האיבר הראשון.

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

Page 33: תרגול מס' 7

נקודות מתקדמות בנוגע למשתניםנקודות מתקדמות בנוגע למשתנים:ניתן להתייחס לכל משתנה המכיל מחרוזת או מספר כרשימה בת איבר אחד. ולכן הפעולות:ניתן להתייחס לכל משתנה המכיל מחרוזת או מספר כרשימה בת איבר אחד. ולכן הפעולות

> set a = “abc def ghi”> set a = “abc def ghi”> echo $a[1]> echo $a[1]abc def gheabc def ghe

הינן חוקיות. אבל, הפקודה הבאה תגרום שגיאההינן חוקיות. אבל, הפקודה הבאה תגרום שגיאה> echo $a[2]> echo $a[2]a: Subscript out of range.a: Subscript out of range.

ניתן לפרק מחרוזת לרשימת המילים המופיעות בה ע"י השמת המחרוזת בתוך סוגריים. זו ניתן לפרק מחרוזת לרשימת המילים המופיעות בה ע"י השמת המחרוזת בתוך סוגריים. זוהדרך הסטנדרטית להפוך מחרוזת שבה רווחים רבים לרשימה שבה בין המילים מופיע רק הדרך הסטנדרטית להפוך מחרוזת שבה רווחים רבים לרשימה שבה בין המילים מופיע רק

רווח אחדרווח אחד>set b = )$a(>set b = )$a(>echo $b>echo $babc def gheabc def ghe>echo $b[2]>echo $b[2]defdef

ניתן להשתמש בסוגריים מסולסלות בכדי להדגיש מהו שמו של משתנה. הדבר שימושי ניתן להשתמש בסוגריים מסולסלות בכדי להדגיש מהו שמו של משתנה. הדבר שימושיבמיוחד כאשר רוצים להוסיף סיומת לערכו של משתנה:במיוחד כאשר רוצים להוסיף סיומת לערכו של משתנה:

> set b = 123> set b = 123> set a = $}b{4> set a = $}b{4> echo $a> echo $a12341234

Page 34: תרגול מס' 7

Command substitutionCommand substitution - ב - בcshellcshell אפשר להשתמש בפקודות מקוננות, כלומר, בתוך פקודה אפשר להשתמש בפקודות מקוננות, כלומר, בתוך פקודה

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

(, ואז מובטח כי היא תתבצע (, ואז מובטח כי היא תתבצע backticksbackticks או או backquotesbackquotes)המכונים באנגלית)המכונים באנגליתלפני ביצוע שאר השורה ותוחלף בערך המוחזר מביצוע הפקודהלפני ביצוע שאר השורה ותוחלף בערך המוחזר מביצוע הפקודה

> echo you have `ls | wc -l` files in `pwd`> echo you have `ls | wc -l` files in `pwd`you have 43 files in /home/roticsyou have 43 files in /home/rotics

מתבצע קודם שיערוך של הפקודות הפנימיות )פקודה הסופרת את מספר מתבצע קודם שיערוך של הפקודות הפנימיות )פקודה הסופרת את מספר ופקודה המחזירה את ופקודה המחזירה את lslsהשורות המתקבלות כתוצאה מהרצת הפקודה השורות המתקבלות כתוצאה מהרצת הפקודה

( ולאחר מכן תוצאותיהן משובצות ( ולאחר מכן תוצאותיהן משובצות home/roticshome/rotics//השם של המדריך הנוכחי השם של המדריך הנוכחי echoechoבפקודה החיצונית - פקודת בפקודה החיצונית - פקודת

Page 35: תרגול מס' 7

Command substitutionCommand substitutionדוגמאדוגמא

> cat list> cat listfile1 file2 file3file1 file2 file3> cat file1> cat file1you are in file1you are in file1Buy a Selkom phoneBuy a Selkom phone> cat file2> cat file2you are in file2you are in file2buy Motorola Pelephonebuy Motorola Pelephone> cat file3> cat file3you are in file3you are in file3Im Grimberg Matzliah Ata MarviachIm Grimberg Matzliah Ata Marviach> cat `cat list`> cat `cat list`you are in file1you are in file1Buy a Selkom phoneBuy a Selkom phoneyou are in file2you are in file2buy Motorola Pelephonebuy Motorola Pelephoneyou are in file3you are in file3Im Grimberg Mazliah Ata MarviachIm Grimberg Mazliah Ata Marviach

Page 36: תרגול מס' 7

CSHELLCSHELLכיצד עובד הכיצד עובד ה---ניתן לראות את ה-ניתן לראות את הC-ShellC-Shell -כ- כ Macro ProcessorMacro Processor :מתוחכם, העובד בלולאה: מתוחכם, העובד בלולאה

הצגת הצגתpromptpromptקבלת פקודהקבלת פקודהנתוח הפקודה, עיבודה וביצועהנתוח הפקודה, עיבודה וביצועה

לצורך ביצוע עבודתו, תוכנית ה לצורך ביצוע עבודתו, תוכנית הC-ShellC-Shell:מנהלת מספר מבני נתונים: מנהלת מספר מבני נתונים .רשימת הפקודות האחרונות שבוצעו.רשימת הפקודות האחרונות שבוצעו רשימת המשתנים רשימת המשתנים רשימת ה רשימת הaliasalias..

::C-shellC-shellסדר עבודת ה סדר עבודת ה :הפקודה מופרדת למילים. התווים רווח ו-הפקודה מופרדת למילים. התווים רווח ו- ניתוח הפקודה:ניתוח הפקודהTabTab משמשים משמשים

כמפרידים בין מיליםכמפרידים בין מילים:ביצוע החלפות לקבלת פקודה פשוטה. מבוצעות החלפות ביצוע החלפות לקבלת פקודה פשוטה. מבוצעות החלפות עיבוד הפקודה:עיבוד הפקודה

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

Page 37: תרגול מס' 7

עיבוד הפקודהעיבוד הפקודה((pipelinepipeline וו redirectionredirection))ללאללא

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

. שורת הפקודה שהתקבלה נשמרת ברשימת ההיסטוריה של הפקודות שבוצעו. . שורת הפקודה שהתקבלה נשמרת ברשימת ההיסטוריה של הפקודות שבוצעו. 22במידה ובוצעו החלפות ההסטוריה שורת הפקודה )לאחר ההחלפות( מודפסת במידה ובוצעו החלפות ההסטוריה שורת הפקודה )לאחר ההחלפות( מודפסת

למסך למסך > echo AAA> echo AAAAAAAAA> echo !!> echo !! echo echo AAAecho echo AAAecho AAAecho AAA

..alias substituionalias substituion מתבצע מתבצע aliasalias. אם המילה הראשונה בפקודה הנה שם של . אם המילה הראשונה בפקודה הנה שם של 33variable substitutionvariable substitution. בצוע . בצוע 44File name substitutionFile name substitution. בצוע . בצוע 55 מוחלפת מוחלפת )`... `( )`... `(back-quoted stringback-quoted string הה. . command substitutioncommand substitution. בצוע . בצוע 66

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

Page 38: תרגול מס' 7

ביצוע הפקודהביצוע הפקודהלאחר בצוע כל ההחלפות הפקודה מבוצעת. ישנן שתי סוגי פקודות:לאחר בצוע כל ההחלפות הפקודה מבוצעת. ישנן שתי סוגי פקודות:

פקודות חיצוניותפקודות חיצוניות-ניתן להריץ כל תוכנית הקיימת במערכת. ה-ניתן להריץ כל תוכנית הקיימת במערכת. הShellShell יפעיל את התוכנית יפעיל את התוכנית

ויעביר לה את הארגומנטים )במידה וניתנו לה(ויעביר לה את הארגומנטים )במידה וניתנו לה(:בכדי למצוא את התוכנית ניתן:בכדי למצוא את התוכנית ניתן

..((full path namefull path name))לתת את מיקומה המדויק לתת את מיקומה המדויק • יחפשה. החיפוש יתבצע בכל המדריכים יחפשה. החיפוש יתבצע בכל המדריכים C-ShellC-Shellלתת רק את שם התוכנית וה לתת רק את שם התוכנית וה •

..pathpathהמופיעים ברשימה של המשתנה המופיעים ברשימה של המשתנה פקודות פנימיותפקודות פנימיות

פקודות שניתנות לתוכנית ה פקודות שניתנות לתוכנית הC-shellC-shell עצמה ומבוצעות ע"י ה עצמה ומבוצעות ע"י ה ShellShell שמפרש את הפקודה.שמפרש את הפקודה.

((historyhistory))ניהול ההסטוריה ניהול ההסטוריה •( ( set/unset/shiftset/unset/shift))ניהול רשימת המשתנים ניהול רשימת המשתנים •)alias )alias/unalias(alias )alias/unaliasניהול רשימת ה ניהול רשימת ה •)working directory )cd(working directory )cdשינוי ה שינוי ה •בקרת זרימה בתסריטים )בתרגול הבא(בקרת זרימה בתסריטים )בתרגול הבא(•ניהול תהליכיםניהול תהליכים•

Page 39: תרגול מס' 7

עיבוד הפקודה – נקודות עיבוד הפקודה – נקודות מתקדמותמתקדמות

I/O redirectionI/O redirectionI/O redirectionI/O redirection-מתבצע ע"י ה- מתבצע ע"י ה ShellShell תפקידו להפנות את הקלט והפלט של . תפקידו להפנות את הקלט והפלט של .

הפקודה המבוצעת לערוץ המתאים: מקלדת/מסך/קובץהפקודה המבוצעת לערוץ המתאים: מקלדת/מסך/קובץ הפקודה המבוצעת כלל אינה מודעת לכך שבוצע הפקודה המבוצעת כלל אינה מודעת לכך שבוצעI/O redirectionI/O redirection כיוון שכל , כיוון שכל ,

ShellShellההפניות מבוצעות ע"י ה- ההפניות מבוצעות ע"י ה-

PipelinePipeline-ה-הpipelinepipeline ‘ הפקודות מבוצעות ’. הפקודות מבוצעות || הינו סדרת פקודות המופרדות ע"י התו ‘ הינו סדרת פקודות המופרדות ע"י התו .’

standard standard מפנה את ה מפנה את ה ShellShellבאופן סדרתי האחת אחר השניה, כאשר ה באופן סדרתי האחת אחר השניה, כאשר ה outputoutput של כל פקודה ב של כל פקודה ב pipelinepipeline ל ל standard inputstandard input של הפקודה הבאה של הפקודה הבאה

האחריה האחריה

מחרוזותמחרוזות-ה-הshellshell מפריד את שורת הפקודה למילים. התווים רווח ו מפריד את שורת הפקודה למילים. התווים רווח ו tabtab מהווים מהווים

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

יתייחס אליהן כאל מחרוזת – מילה יתייחס אליהן כאל מחרוזת – מילה shellshellהמילים הנפרדות בתוך גרשיים וה המילים הנפרדות בתוך גרשיים וה אחת.אחת.

Page 40: תרגול מס' 7

עיבוד הפקודה – סוגי גרשייםעיבוד הפקודה – סוגי גרשיים((back quoteback quote))- גרש הפוך - גרש הפוך ` ` ((double quotedouble quote)) - גרשים כפולות - גרשים כפולות ""((single quotesingle quote)) - גרש יחיד - גרש יחיד ''

back quotesback quotes משמשים לצורך משמשים לצורך command substitutioncommand substitution-ה-. ה .shellshell מתייחס מתייחס כאל פקודה אחת ומבצע אותה. תוצאת כאל פקודה אחת ומבצע אותה. תוצאת back quotesback quotesלכל המחרוזת בין ה-לכל המחרוזת בין ה-

הפקודה מוחלפת במחרוזת הפקודה. במידה ובתוצאת הפקודה ישנם הפקודה מוחלפת במחרוזת הפקודה. במידה ובתוצאת הפקודה ישנם יתייחס לתוצאת הפקודה כאל מספר מילים יתייחס לתוצאת הפקודה כאל מספר מיליםshellshellרווחים אזי ה-רווחים אזי ה-

single quotessingle quotes ו ו double quotesdouble quotes משמשים בכדי לגרום ל משמשים בכדי לגרום ל ShellShell להתייחס להתייחס למספר מילים )מופרדות ברווחים וטאבים( כאל מילה אחת. ע"י השמת למספר מילים )מופרדות ברווחים וטאבים( כאל מילה אחת. ע"י השמת

להתנהג באופן שונה מהרגיל. להתנהג באופן שונה מהרגיל. ShellShellמחרוזת בין גרשיים ניתן לגרום ל-מחרוזת בין גרשיים ניתן לגרום ל-במידה ומופיעה התייחסות למשתנה בתוך ה- – במידה ומופיעה התייחסות למשתנה בתוך ה- החלפת משתניםהחלפת משתנים – double double

quoted stringquoted string המשתנה יוחלף בערכו. במידה וההתיחסות מופיעה בתוך המשתנה יוחלף בערכו. במידה וההתיחסות מופיעה בתוך single quoted stringsingle quoted string:לא תתבצע החלפה: לא תתבצע החלפה

> set a = AAA> set a = AAA> echo “a=$a”> echo “a=$a”a=AAAa=AAA> echo ‘a=$a’> echo ‘a=$a’a=$aa=$a

לא מבוצעת עבור – לא מבוצעת עבור החלפת שמות קבצים החלפת שמות קבצים –single or double quoted stringssingle or double quoted strings..כאשר המחרוזת ב – כאשר המחרוזת ב החלפת פקודותהחלפת פקודות –back quotesback quotes מופיעה בתוך מופיעה בתוך double double

quotequote ה ה shellshell.מתייחס לתוצאת כאל מילה אחת. מתייחס לתוצאת כאל מילה אחת