הבהרות
הבהרה1: נא לסלוח על טעויות כתיב והחלפות זכר לנקבה וכדו', עברית היא לא שפת אם שלי
הבהרה2: יש הרבה שורות פקודה, נשתדל לא להתמקד בשום אחד מהם אלא לדבר על דברים שקשורים לכולם
הבהרה3: אין צורך בשום ידע מוקדם, חוץ מלדעת איפה נמצא כפתור ההפעלה של המחשב...
הבהרה4: אין שום התחייבות להמשיך את הסדרה, זה על בסיס זמן פנוי וחשק...
הבהרה5: למען הסדר הטוב, פתחתי עוד נושא לתגובות, נא להגיב שם. כאן אני מתכוון להעלות המשכים לסדרה.
הבהרה6: בל"נ לא יהיו עוד הבהרות ומיד ניגש לענין...
הקדמה: שורת הפקודה מהו
לרוב האנשים המילה "תוכנה" אומרת: "חלון, ובתוכו אובייקטים גראפיים, שבאמצעות אינטראקציה איתם אפשר לעשות פעולות מסויימות". זהו התוכנה האינטראקטיבית. הוא נמצא כל הזמן (עד שתסגור אותו), כל מרכולתו פרושה לפניך, הוא יושב ומחכה לתגובה שלך, ורק נשאר לך לבחור מה אתה רוצה. אתה בוחר משהו, הוא עושה את הפעולה, ושוב חוזר ומחכה לתגובה הבא שלך. התוכנה ה"לא איטראקטיבי" או ה"פקודה", לעומת זאת, אינו יושב ומחכה לתגובה שלך (כמעט) אף פעם, מריצים אותו, הוא עושה מה שביקשת ומיד מסיים תהליך ונסגר. רוצה עוד משהו? צריך להריץ אותו שוב.
בד"כ מריצים תוכנה באמצעות תוכנה אחרת שנקרא ה-shell (מעטפת). יש shell גראפי (בווינדוס נקרא explorer.exe) ובאמצעיתו אפשר להריץ תוכנות אינטראקטיביות ע"י לחיצה על אייקון, ויש shell טקסטואלי שבו מריצים תוכנות ע"י כתיבת שמם וזהו שורת הפקודה.
שורת הפקודה = סביבה מבוסס טקסט שבה מריצים תוכנות (לרוב, פקודות לא אינטראקטיביות), (CMD ב-Windows ו-DOS (ז"ל) או Powershell בווינדוס, bash, sh, וכו' בלינוקס, וכו')
למרבה האירוניה, למרות שדרך שורת הפקודה מריצים בד"כ רק תוכנות "לא אינטראקטיביות", אבל שורת הפקודה עצמה מתנהג יותר כתוכנה אינטראקטיבית. הוא מראה לך חלון עם סמן מהבהב ומחכה לקלט שלך. מגיב לפקודות, ובסיום הפקודה אינו נסגר אלה מחכה לעוד.
רכיבים של שורת פקודה
- מקום לקלט (input) - כאן מזינים את הפקודות.
- מקום לפלט (output) - כאן מקבלים תוצאות. (בד"כ זה אותו חלון של הקלט)
- PROMPT (הנחיה?) - רמז ויזואלי שהסביבה מוכן לקבל קלט. כאשר פקודה רצה, הסמן המהבהב נמצא בשורה בפנ"ע בלי PROMPT לפניה (לפעמים יש פלט של הפקודה שרצה, לפעמים לא). כאשר הפקודה מסתיימת, ושורת הפקודה מוכנה לקבל עוד פקודה, מודפס שוב שורת ה-PROMPT ואח"כ סמן מהבהב, זה סימן שאפשר להתחיל לכתוב עוד פקודה.
זה נראה משהו כזה בווינדוס:
C:\Users\yossi>_
(למה כתוב נתיב ב-PROMPT? נגיע לזה יותר מאוחר).
רכיבים של "פקודה" (תוכנה לא אינטראקטיבית)
הרכיבים: קלט, פלט, וחישוב
הפקודה מקבלת קלט עושה עם זה חישוב ומחזירה את הפלט. (לא תמיד חייבים כל הרכיבים).
קלט
יש כמה דרכים להכניס קלט לפקודה
- דרך פרמטרים (נקראים גם switches, ו-arguments) = כל מה שכותבים אחרי שם הפקודה. כל זה מוזן לפקודה, הפקודה אמור להבין את זה ולפעול לפי"ז. כותבים את שם הפקודה. אח"כ כותבים את הפרמטרים. כל פקודה מחליטה לעצמה איך לתרגם את הפרמטרים שלה. (אם כי יש כמה מוסכמות מקובלות.)
דוגמא:
echo "Hello, World!"
echo
הוא שם הפקודה. פקודה זו לוקחת את הפרמטרים ופולט אותם החוצה, בלי להפעיל עליהם שום חישובים.
"Hello, World!" הוא פרמטר שהפקודה מקבלת.
הפלט:
Hello, World!
אפשר להזין יותר מפרמטר אחד. וכל פרמטר יכול להכיל יותר ממילה אחת. בד"כ רווח מחלק בין פרמטרים, אם כותבים גרשיים מסביב למילים זה מחבר אותם לפרמטר אחד. הפקודה echo
יכולה לקבל יותר מפרמטר אחת. לפי"ז הייתי יכול לכתוב:
echo Hello, World!
ואז זה היה מתורגם לפקודה עם 2 פרמטרים - "Hello," ו-"World!". במקרה שיש יותר מפרמטר אחד, הפקודה echo
פולט אותם החוצה עם רווח ביניהם, ונקבל אותו פלט.
אמנם, מה יקרה אם נכתוב:
echo "Hello, World!"
echo Hello, World!
הפלט יהיה:
Hello, World!
Hello, World!
(אזהרה:
הנ"ל נכון רק ב-bash, ב-CMD זה לא יעבוד, אבל העיקרון נכון גם ב-CMD רק שecho
הוא לא פקודה רגילה ב-CMD, אולי נסביר יותר בהמשך)
במקרה הראשון יש פרמטר אחד עם הרבה רווחים באמצע, במקרה השני יש 2 פרמטרים בלי שום רווחים, הרווחים מתורגמים כמחלקים בין הפרמטרים, ולא מוזנים לפקודה.
עוד דרכים להזנת קלט:
- קבצים
- משתני סביבה
פלט
- טקסט מודפס בחלון שורת הפקודה
- פעולה שקורה (למשל כיבוי המחשב)
- קבצים
- קוד (מספר) שהתוכנה מחזירה - (return code)
- ....
ההמשך יבוא... (אולי כן, ואולי לא...)