עבור לתוכן

עזרה קטנה בbash scripting

Featured Replies

פורסם

אהלן, אני מנסה (באמצעות bash script) להציג את כמות הזכרון שמשתמשים בו באחוזים.

הנה מה שיש לי עד עכשיו:

#!/bin/bash
used = free -m | awk '/Mem/ {print $3}'
total = free -m | awk '/Mem/ {print $2}'
echo "$used * 100 / $total" | bc
exit

כשאני מנסה להריץ את זה הוא אומר שused וtotal (שני המשתנים) הם פעולות לא מוגדרות (command not found).

מה הבעיה פה?

כמו שאפשר להבין פה אני חדש בכל העסק של bash scripting.

תודה מראש! :yelclap:

פורסם

מאוד פשוט.

תוריד את הרווחים לפני ואחרי הסימן "=".

פורסם
  • מחבר

אוקיי, זה פתר את הבעיה הראשונה....

אחרי זה התלונן עם אותה שגיאה על האופציה של free אז הוספתי סוגריים מסביב לו:

#!/bin/bash
used=(free -m) | awk '/Mem/ {print $3}'
total=(free -m) | awk '/Mem/ {print $2}'
echo "$used * 100 / $total" | bc
exit

אבל משום מה זה עדיין לא עובד, זורק את השגיאה הזאת (ורק אותה):

(standart_in) 1: parse error

יש לך מושג למה?

פורסם
  • מחבר

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

פורסם
  • מחבר

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

פורסם

הי, סליחה, אני פשוט עובד ומגיב פה ביחד... :P

זה אמור להיראות ככה כדי לעבוד:

#~/bun/bash
used=$(free -m | awk '/Mem/ {print $3}')
total=$(free -m | awk '/Mem/ {print $2}')
echo "$used * 100 / $total" | bc
exit

תשים לב למיקום הסוגריים וסימן ה$.

  • 2 שבועות מאוחר יותר...
פורסם

היי,

הנה עוד דרך נוספת לכתיבת סקריפט כזה :xyxthumbs:

סתם כדי להראות שיש מספר דרכים להגיע לאותה תוצאה:


#!/bin/bash
used=`free -m | awk 'NR==2 {print $3}'`
total=`free -m | awk 'NR==2 {print $2}'`
echo "$used * 100 / $total" | bc
exit 0

פורסם
[ash@newisland ~]$ let m=100*$(free -m | awk '/Mem/ {print $3}')/$(free -m | awk '/Mem/ {print $2}')
[ash@newisland ~]$ echo $m
94

פורסם

אם כבר שיפורים אני מעדיף את cut על פני awk למשימות האלה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים