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

בדרך כלל כשאתה מתחיל לעבוד על ה- אזור ניהול שרתים עם מערכות הפעלה GNU / Linux ו / או Unix, מוצאים (פנים) עובדים בסביבה שבה בדרך כלל יש חבורת משימות מתוזמנות שכתבו מנהלים אחרים ושבשלב מסוים אנחנו חייבים לנהל (לנהל) סעיף לפתור כל בעיה, לשפר ו / או לסלק, כדי לעמוד בדרישה חדשה של המוסד איפה הוא עובד. אז זה לא מוזר, כי כל חדש סיסדמין בכל מקום עבודה אתה מתמודד עם המשימה המסורבלת להבין כמה מהמקומות תסריט מעטפת נוצר על ידי אחרים SysAdmin הישן, שאינם כתובים היטב, או במבנה הגיוני או בכתיבה, לא קלים להבנה, או במקרה הגרוע ביותר, עם פקודות פקודה, לא טיפוסיות, ישנות, לא יעילות, או כתובות בצורה מביכה ומבלבלת.

מעטפת Scripting

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

לכן, לאחר סדרת הפרסומים המעשית על "למד Scripting Shell" שם נבחן כמה סקריפטים מעשיים מאוד עם פקודות פשוטות ובסיסיות, נתחיל בסדרה החדשה הזו שנקראת "שיטות מומלצות ליצירת סקריפט של מעטפת ב- GNU / Linux", שם נתמקד ביסודיות בכל היבט קטן בו ובסיבה לדברים רבים, כלומר נסקור כמה טיפים שיגרמו לנו ליצור תסריטים טובים יותר, אך לא כל כך עבור עצמנו, אלא עבור האדם הבא (SysAdmin) צריך לנהל אותם. אז אתה לא צריך לעבור את המשימה המייגעת והקשה להבין מה אני מקודד, איך ומדוע ומדוע זה כבר לא עובד.

בזה הודעה ראשונה (1) של הסדרה החדשה הזו "שיטות עבודה מומלצות עבור סקריפט Shell טוב עבור GNU / Linux" נדבר על מה הולך או צריך ללכת ב כותרת סקריפט של מעטפת.

=======================================
כותרת - הזמנת הפגז
=======================================

#! / path / interpret [פרמטר-ארגומנט]

השורה העליונה היא המבנה הבסיסי באמצעותו מופעל סקריפט של מעטפת עבור GNU / Linux. ניתן לתאר את מרכיביו באופן הבא:

#! => שא-בנג

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

# / Bin / sh
#! / bin / bash
#! / usr / bin / perl
#! / usr / bin / tcl
#! / bin / sed -f
#! / usr / awk -f

כל אחת מהשורות שתוארו לעיל (כדוגמה) קוראת למעטפת אחרת. השורה / Bin / sh, להפעיל את פָּגָז כברירת מחדל (Bash במערכת הפעלה GNU / Linux) או דומים אחרים. באמצעות # / Bin / sh, ערך ברירת המחדל של בורן מעטפת ברוב הגרסאות המסחריות של מערכות הפעלה מבוססות UNIX, הוא הופך את הסקריפט ליצירה נייד למערכות הפעלה אחרות שאינן לינוקס כהלכה, אך דומה או מבוסס עליו או על UNIX, אם כי זה מקריב מאפיינים ספציפיים של BASH. עם זאת, הרצף "#! / Bin / sh" תואם את הנורמה POSIX תקן.

שים לב הדרך הנתונה בשא-בנג חייבת להיות נכונה, אחרת הודעת שגיאה, בדרך כלל "פקודה לא נמצאה", זו תהיה התוצאה היחידה של ביצוע התסריט. זכרו את זוג הדמויות »#! « ניתן להשמיט אותו אם ה- Script מורכב רק ממכלול פקודות כלליות של מערכת ההפעלה, כלומר ללא שימוש בהוראות פנימיות של Shell. וזכור שוב את זה »#! / Bin / sh« קורא למתורגמן המוגדר כברירת מחדל, אשר ברירת המחדל היא »#! / Bin / bash« בצוות איתו מערכת הפעלה GNU / Linux.

ביחס לטיעונים, ניתן להשתמש בהם בכמה, אך הנפוץ ביותר הוא: »-E«. מה שהופך את התסריט לאמת את שגיאות הביצוע של כל פקודהo (קו ביצוע) ואם חיובי, מכריח את העצירה והיציאה, טיפוסי הוא »-F« סעיף ציין איזה סקריפט לטעון ואחד הנדירים ביותר הוא »-Rm« שמבצע את המחיקה שלו לאחר סיום ביצועו. אפשר לציין רק ב- שא-בנג עד ארגומנט יחיד (פרמטר) אחרי שם התוכנית שתבוצע.

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

העצה שלי (שיטות עבודה מומלצות) לבחור את השא-בנג הכי טוב וכותרת א תסריט מעטפת צליל:

#! / usr / bin / env bash

מדוע להשתמש בפקודה »Env« אנו מציינים בפני מערכת ההפעלה את המתורגמן שישמש עם הנתיב המדויק המוגדר בתוכו כברירת מחדל, המאפשר לנו לקבל שא-בנג שאנחנו מגדילים את הניידות של זה, כי לא בסך הכל מערכת הפעלה GNU / Linux למתורגמנים או לתוכניות יש את אותה הדרך. ובלי ויכוחים, כי בשביל זה עדיף להשתמש בפקודה סט, כי איתו אנחנו יכולים לאמת שגיאות, כלליות (-e) או ספציפיות (+ x / -x), או ל נקה קביעות מוגדרות מראש גלובליות עבור משתנים סביבתיים (-i) או משתנים ספציפיים (-u / –unset). ולבסוף, ל לבצע פעולות משלימות ספציפיות (- o) בתוך התסריט.

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

#! / usr / bin / env bash
# ציין את המתורגמן הבסיסי עם הנתיב המוחלט על ידי מערכת ההפעלה.

set -o מורם
# להגיד לסקריפט לעצור ולסגור כאשר פקודה או שורת ביצוע נכשלים.

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

set -o pipefail
# כדי לקבל את סטטוס היציאה של ההזמנה האחרונה שהחזירה קוד יציאה שאינו אפס.

# set -o xtrace
# כדי לעקוב אחר מה שרץ. שימושי לאיתור באגים. אפשר אותו כדי לבדוק אם קיימות שגיאות בלבד.

זכור לעקוב אחר ההמלצות הבאות:

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

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

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

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

05.- השתמש בתחביר VARIABLE = $ (פקודה) להחלפת פקודה: אם ברצונך ליצור משתנה שערכו נגזר מפקודה אחרת, ישנן שתי דרכים לעשות זאת בבאש. עם תיקון גבכלומר עם הדמויות " , אוג'ם: VARIABLE = `פרמטרים של אפשרויות פקודה`, אבל זה כבר הוצא משימוש, אז התחביר VARIABLE = $ (פקודה) זו הדרך המודרנית, המקובלת והמומלצת ביותר. NO -> DATE = `date +% F '/ YES -> DATE = $ (תאריך +% F)

06.- השתמש במודולים ו / או במשתני אימות של משתמש משתמש מורשה עם או בלי סיסמה: להגדלת רמות האבטחה במידת הצורך.

07.- השתמש במודולים ו / או משתנים של אימות מערכת ההפעלה (Distro, גרסה, אדריכלות): כדי למנוע שימוש בפלטפורמות לא מתאימות.

08.- השתמש במודולים (פרוצדורות / סעיפים) כדי לאשר ביצוע פעולות קריטיות או פעולות אצווה (מודולים / פונקציות): למזער טעויות עקב אלתור או חוסר זהירות.

09.- ספק ממשקים ידידותיים למשתמש (ידידותי למשתמש): לפי טרמינל עם תפריטים וצבעים עם דיאלוג ו ממשקים גרפיים למשתמשים בסיסיים עם Zenity, Gxmessage. ואם אפשר להשתמש בתמיכה של התראות קוליות המזהות אירועים ניתנים לזיהוי על פי צליל. ניסיתי כמה שיותר שהתסריט שלך יכול לעבוד בשני הכיוונים רק על ידי הפעלה או השבתה של אפשרויות / מודולים / פונקציות.

10.- כלול מודולי קבלת פנים ופרידה (הודעות): במידת הצורך כדי להגביר את האינטראקטיביות עם המשתמש.

11.- כלול מודול אימות ביצוע כפול: צור עבורו קובץ נעילה כדי למנוע את ביצועו יותר מפעם אחת בו זמנית.

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

13.- קריאה באופן ברור וברור הקריאות למתורגמנים אחרים (שפות תכנות) במסגרת התסריט: הזמן אותם בבירור לפי קווים או מודולים.

לדוגמה:

# ================================================== #
#!/bin/bash
#Llamando a un interprete externo a BASH
echo 'El siguiente texto será mostrado por el interprete de PERL'
perl -e 'print "Este texto es mostrado por un script PERL embebido.\n";'
exit 0
# ==================================================#
# ==================================================# 
#!/bin/bash #Llamando al interprete de Python. 
echo 'El siguiente es un script de python:'
echo print "Hola, mundo!" | tee $HOME/.testpythonbash.py
python $HOME/.testpythonbash.py exit 0
# ==================================================#

# ======================================================= #
#!/bin/bash
# bash-y-perl.sh

echo "Saludos desde la parte BASH del script."
# Es posible añadir mas comandos BASH aqui.

exit 0
# Fin de la parte BASH del script.

###########################################################

#!/usr/bin/perl
# Esta parte del script se invoca con la opcion -x.

print "Saludos desde la parte PERL del script.\n";
# Podemos añadir mas comandos PERL aqui.

# Fin de la parte PERL del script.
# ======================================================= #
 

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

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

עד לפרסום הבא של הסדרה החדשה הזו.


6 תגובות, השאר את שלך

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם. שדות חובה מסומנים *

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.

  1.   מקס ג'י רודריגז דיג'ו

    רק פרט אחד, זה "שבנג" 😛
    הודעה טובה מאוד, שיטות עבודה טובות לטווח הארוך תמיד עוזרות לתקינה.

  2.   כזה שעבר כאן דיג'ו

    Bash אינו מעטפת ברירת המחדל בכל ההפצות, ולכן הקישור הסמלי / bin / sh לא תמיד מצביע על bash. בדביאן למשל (ואני מניח לכן אובונטו):
    $ ls -l / bin / sh
    lrwxrwxrwx 1 שורש שורש 4 aza 8 2014 / bin / sh -> מקף
    מעטפת ברירת המחדל לכן על דביאן היא מקף. ראה כאן: https://wiki.debian.org/Shell

  3.   ללא שם דיג'ו

    כטיפ להכיר את המעטפת בשימוש:

    מהדהד 0 $
    הד $ SHELL
    שלח | grep SHELL

  4.   אינג 'חוסה אלברט דיג'ו

    אתה אכן צודק! ניסיתי ב- DEBIAN 9 וב- Kali Linux 2.0 וזה נכון! לוקח אותך לרוץ. ביתר שאת ההמלצה של: #! / Usr / bin / env bash אם זה ה- Shell שבו אתה רוצה להשתמש.

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

    במחשוב, שבנג הוא רצף התווים המורכב מסימן מספר התווים וסימן הקריאה (#!) בתחילת התסריט. זה נקרא גם sha-bang, [1] [2] hashbang, [3] [4] פאונד-באנג, [5] או hash-pling

    מ: https://en.wikipedia.org/wiki/Shebang_%28Unix%29

    פרק 2. החל מ- Sha-Bang
    מ: http://www.tldp.org/LDP/abs/html/sha-bang.html

  5.   אינג 'חוסה אלברט דיג'ו

    בנוסף: שם בסיס 0 $