דף הבית » איך ל » המדריך למתחילים כדי Shell Scripting את היסודות

    המדריך למתחילים כדי Shell Scripting את היסודות

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

    מהו Shell Scripting?

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

    עכשיו, כמה מכם שהשתמשו ב- Windows לפני השימוש בלינוקס אולי זוכרים קבצי אצווה. אלה היו קבצי טקסט קטנים שאתה יכול למלא עם פקודות לבצע ו- Windows יפעיל אותם בתורו. זה היה חכם ו מסודר דרך לעשות כמה דברים לעשות, כמו לרוץ משחקים במעבדה המחשב התיכון שלך כאשר אתה לא יכול לפתוח תיקיות מערכת או ליצור קיצורי דרך. קבצי אצווה ב- Windows, תוך שימושיות, הם חיקוי זול של סקריפטים פגז.

    סקריפטים Shell מאפשרים לנו לתכנת פקודות שרשראות יש את המערכת לבצע אותם כמו אירוע scripted, בדיוק כמו קבצי אצווה. הם גם מאפשרים פונקציות שימושיות הרבה יותר, כגון החלפת תחליף. ניתן להפעיל פקודה, כמו תאריך, ולהשתמש בפלט שלה כחלק מתכנית שם קובץ. באפשרותך להפוך את הגיבויים לאוטומטיים וכל קובץ מועתק יכול לכלול את התאריך הנוכחי עד סוף שמו. סקריפטים הם לא רק הפקודות של פקודות, או. הם תוכניות בזכות עצמם. Scripting מאפשר לך להשתמש בפונקציות תכנות - כגון 'for' לולאות, אם / אחר / אחר הצהרות, וכן הלאה - ישירות בתוך ממשק מערכת ההפעלה שלך. וגם, אתה לא צריך ללמוד שפה אחרת, כי אתה משתמש במה שאתה כבר יודע: שורת הפקודה.

    זה באמת הכוח של scripting, אני חושב. אתה מקבל תוכנית עם פקודות אתה כבר יודע, תוך לימוד סיכות של רוב שפות תכנות הגדולות. צריך לעשות משהו חוזר ומייגע? סקריפט זה! צריך קיצור עבור פקודה מפותלת באמת? סקריפט זה! רוצה לבנות ממשק קל לשימוש בממשק שורת הפקודה למשהו? תסריט זה!

    לפני שאתה מתחיל

    לפני שנתחיל בסדרת הסקריפטים שלנו, בואו נסקור כמה מידע בסיסי. נשתמש בקליפת הבש, שבה רוב ההפצות של לינוקס ישתמשו באופן מקורי. Bash זמין עבור משתמשי Mac OS ו Cygwin ב- Windows, מדי. מאז זה כל כך אוניברסלי, אתה אמור להיות מסוגל סקריפט ללא קשר לפלטפורמה שלך. בנוסף, כל עוד כל הפקודות כי הם הפניה קיימים, סקריפטים יכולים לעבוד על פלטפורמות מרובות עם מעט to tweaking לא נדרש.

    Scripting יכול בקלות לעשות שימוש "הרשאות מנהל" או "superuser", אז זה הכי טוב לבדוק את הסקריפטים לפני שאתה שם אותם לעבודה. גם להשתמש בשכל הישר, כמו לוודא שיש לך גיבויים של הקבצים שאתה עומד להפעיל סקריפט ב. כמו כן, חשוב מאוד להשתמש באפשרויות הנכונות, כגון -i עבור הפקודה rm, כך שהאינטראקציה שלך נדרשת. זה יכול למנוע כמה טעויות מגעיל. ככזה, לקרוא את הסקריפטים שאתה מוריד ולהיזהר עם הנתונים שיש לך, רק במקרה דברים משתבשים.

    הליבה שלהם, scripts הם פשוט קבצי טקסט רגיל. ניתן להשתמש בכל עורך טקסט כדי לכתוב אותם: gedit, emacs, vim, nano ... רשימה זו ממשיכה. רק להיות בטוח לשמור את זה בתור טקסט רגיל, לא כמו טקסט עשיר, או מסמך Word. מאז אני אוהב את קלות השימוש, כי ננו מספק, אני אהיה משתמש בו.

    הרשאות סקריפט ושמות

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

    chmod + x ~ / somecrazyfolder / script1

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

    chmod u + x ~ /

    כדי להפעיל את התסריט הזה, היית צריך cd לתוך המדריך הנכון ולאחר מכן להפעיל את התסריט ככה:

    cd ~ / somecrazyfolder

    ./ script1

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

    ~ / bin

    בהפצות מודרניות רבות, התיקייה הזו כבר לא נוצרת כברירת מחדל, אך ניתן ליצור אותה. זה בדרך כלל שבו קבצים ההפעלה מאוחסנים השייכים למשתמש שלך ולא למשתמשים אחרים. על ידי הצבת scripts כאן, אתה יכול פשוט להפעיל אותם על ידי הקלדת השם שלהם, בדיוק כמו פקודות אחרות, במקום צורך cd מסביב ולהשתמש בקידומת './'.

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

    אשר [הפקודה]

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

    הנחיות Scripting

    כפי שציינתי קודם, כל קובץ סקריפט הוא טקסט רגיל. זה לא אומר שאתה יכול לכתוב מה שאתה רוצה כל willy-nilly, אם כי. כאשר קובץ טקסט מנסה לבצע, פגזים יבדקו דרכם לרמזים באשר לסקריפטים או לא, וכיצד לטפל בכל דבר כראוי. בגלל זה, יש כמה הנחיות אתה צריך לדעת.

    1. כל סקריפט צריך להיות עם "#! / Bin / bash"
    2. כל שורה חדשה היא פקודה חדשה
    3. שורות תגובה מתחילות עם #
    4. פקודות מוקפות ()

    חשיפת האש-בנג

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

    #! / bin / bash

    אם אתה משתמש פגז אחר, תחליף את הנתיב שלה כאן. שורות הערות מתחילות עם hashes (#), אך מוסיפים את המפץ (!) ואת נתיב הקליפה לאחר שהוא סוג של גרזן שיעקוף את כלל ההערה ויאלץ את התסריט לבצע עם הקליפה שהקו הזה מצביע על.

    קו חדש = פקודה חדשה

    כל שורה חדשה צריכה להיחשב פקודה חדשה, או רכיב של מערכת גדולה יותר. אם / אז / אחר הצהרות, למשל, ישתלט על שורות מרובות, אבל כל רכיב של מערכת זו היא בשורה חדשה. אל תתנו פקודה לדמם מעל לשורה הבאה, כמו זה יכול לחתוך את הפקודה הקודמת ולתת לך שגיאה בשורה הבאה. אם עורך הטקסט שלך עושה את זה, אתה צריך לכבות את גלישת הטקסט להיות בצד בטוח. ניתן לכבות גלישת טקסט ב- nano קצת להכות ALT + L.

    תגובה לעתים קרובות עם #s

    אם אתה מתחיל שורה עם #, הקו מתעלם. זה הופך אותו לקו הערה, שבו אתה יכול להזכיר לעצמך מה את הפלט של הפקודה הקודמת היה, או מה הפקודה הבאה תעשה. שוב, לבטל את גלישת הטקסט, או לשבור לך הערה לתוך שורות מרובות כי כל להתחיל עם חשיש. באמצעות הרבה הערות הוא נוהג טוב לשמור, כפי שהוא מאפשר לך ואנשים אחרים לצבוט את הסקריפטים שלך בקלות רבה יותר. היוצא מן הכלל היחיד הוא גרזן Hash-Bang המוזכר לעיל, לכן אל תעקוב אחר # שניות עם! S. ,-)

    פקודות מוקפות בסוגריים

    בימים מבוגרים יותר, חילופי פקודות נעשו עם סימני סימני יחיד (', מניות ~ מפתח). אנחנו לא הולכים להיות נוגעים זה עדיין, אבל כמו רוב האנשים ללכת ולחקור אחרי ללמוד את היסודות, זה כנראה רעיון טוב להזכיר כי אתה צריך להשתמש בסוגריים במקום. זה בעיקר כי כאשר אתה קן - לשים פקודות בתוך פקודות אחרות - סוגריים לעבוד טוב יותר.

    התסריט הראשון שלך

    נתחיל עם סקריפט פשוט המאפשר לך להעתיק קבצים ולצרף תאריכים לסוף שם הקובץ. בואו נקרא לזה "datecp". ראשית, נבדוק אם שם זה מתנגש במשהו:

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

    בואו ניצור קובץ ריק בתיקייה ~ / bin:

    גע ~ ~ / bin / datecp

    ובואו נשנה את ההרשאה עכשיו, לפני שנשכח:

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

    ננו ~ / bin /

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

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

    מה יהיה לשים את משתנה? ובכן, בואו לאחסן את התאריך והשעה! לשם כך, ניצור את הפקודה 'תאריך'.

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

    אתה יכול לראות את זה על ידי הוספת משתנים שונים שמתחילים עם%, אתה יכול לשנות את הפלט של הפקודה על מה שאתה רוצה. לקבלת מידע נוסף, באפשרותך לעיין בדף הידני עבור הפקודה date (תאריך).

    הבה נשתמש באיטרציה האחרונה של פקודת התאריך, "date +% m_% d_% y-% H.% M% S", והשתמש בה בסקריפט שלנו.

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

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

    variable = $ (ארגומנטים של שורת הפקודה)

    ובשבילנו, היינו בונים את זה כך:

    date_formatted = $ $ (תאריך +% m_% d_% y-% H.% M% S)

    זה מה שאנחנו קוראים תחליף הפקודה. אנחנו בעצם אומר bash כי בכל פעם המשתנה "date_formated" מופיע, כדי להפעיל את הפקודה בתוך סוגריים. לאחר מכן, מה הפלט נותן פקודות צריך להיות מוצג במקום שם המשתנה, "date_formatted".

    הנה סקריפט לדוגמה ואת הפלט שלה:

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

    בואו נחזור לסקריפט שלנו. הבה הבא להוסיף בחלק העתקה של הפקודה.

    cp -iv $ 1 $ 2. $ date_formatted

    פעולה זו תפעיל את פקודת ההעתקה, עם האפשרויות -i ו- -v. הראשון יבקש ממך אימות לפני החלפת הקובץ, והאחרון יציג את מה שמופיע על שורת הפקודה.

    לאחר מכן, תוכל לראות שהוספתי את האפשרות "$ 1". כאשר scripting, סימן דולר ($) ואחריו מספר יציין את הארגומנט המספרי של הסקריפט כאשר הוא הופעל. לדוגמה, בפקודה הבאה:

    ct-trogdor2.mp3 ringtone.mp3

    הארגומנט הראשון הוא "Trogdor2.mp3" והארגומנט השני הוא "ringtone.mp3".

    במבט לאחור על התסריט שלנו, אנו יכולים לראות שאנו מתייחסים לשני טיעונים:

    פירוש הדבר שכאשר אנו מריצים את הסקריפט, נצטרך לספק שני ארגומנטים כדי שהסקריפט יפעל כראוי. הארגומנט הראשון, $ 1, הוא הקובץ שיועתק ויוחלף כארגומנט הראשון של הפקודה cp -iv.

    הארגומנט השני, $ 2, יפעל כקובץ הפלט עבור אותה פקודה. אבל, אתה יכול גם לראות שזה שונה. הוספנו תקופה והפכנו את המשתנה "תאריך פורמט" מלמעלה. סקרן לגבי מה זה עושה?

    הנה מה שקורה בעת הפעלת הסקריפט:

    אתה יכול לראות את קובץ הפלט מופיע כמו כל מה שהזנתי עבור $ 2, ואחריו תקופה, ולאחר מכן את הפלט של הפקודה תאריך! הגיוני, נכון?

    עכשיו כשאני מפעיל את הפקודה datecp, זה יפעיל את הסקריפט הזה יאפשר לי להעתיק כל קובץ למיקום חדש, באופן אוטומטי להוסיף את התאריך והשעה עד סוף שם הקובץ. שימושי עבור בארכיון דברים!


    Shell scripting הוא בלב של ביצוע מערכת ההפעלה שלך בשבילך. אתה לא צריך ללמוד שפת תכנות חדשה כדי לגרום לזה לקרות, או. נסה scripting עם כמה פקודות בסיסיות בבית ולהתחיל לחשוב על מה אתה יכול להשתמש בו עבור.

    האם אתה סקריפט? יש לך עצות עבור מתחילים? שתף את המחשבות שלך בהערות! יש עוד בסדרה הזאת!