الفرق بين المراجعتين ل"Bash/creating and running a script"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
(مراجعة 6: إضافة تصانيف)
 
(6 مراجعات متوسطة بواسطة مستخدمين اثنين آخرين غير معروضة)
سطر 5: سطر 5:
 
ويمكن استخدام تلك البرامج لأتمتة المهام باستخدام أداة <code>cron</code> أو في إجراءات الإقلاع وإيقاف التشغيل في أنظمة يونكس، حيث يُحدَّد أسلوب عمل العفاريت (daemons) والخدمات في شيفرات init النصية (init scripts).
 
ويمكن استخدام تلك البرامج لأتمتة المهام باستخدام أداة <code>cron</code> أو في إجراءات الإقلاع وإيقاف التشغيل في أنظمة يونكس، حيث يُحدَّد أسلوب عمل العفاريت (daemons) والخدمات في شيفرات init النصية (init scripts).
  
ولإنشاء برنامج للصدفة، افتح ملفًا فارغًا في المحرر النصي الذي تفضله، إذ لا يهم هنا نوع المحرر الذي تستخدمه فأغلبها يقوم بالمهمة التي نريدها الآن، وهي كتابة برنامج لصدفة Bash، فاستخدم ViM إن شئت أو emacs أو gedit أو dtpad أو غير ذلك.
+
ولإنشاء برنامج للصدفة، افتح ملفًا فارغًا في المحرر النصي الذي تفضله، إذ لا يهم هنا نوع المحرر الذي تستخدمه فأغلبها يقوم بالمهمة التي نريدها الآن، وهي كتابة برنامج لصدفة Bash، فاستخدم VIM إن شئت أو emacs أو gedit أو dtpad أو غير ذلك.
  
لكن ما قد يجعلك تستخدم محررًا متطورًا مثل ViM أو emacs على ما سواهما هو أنه يمكنك تهيئتهما للتعرف على النصوص التي تكتبها وإبرازها بألوان مختلفة -ومن ذلك نصوص وأوامر الصدفة التي سنكتبها-، وذلك يقلل الأخطاء التي يقع فيها المبتدئون عادة مثل إغفال إغلاق قوسين <code>()</code> أو نسيان الفواصل المنقوطة <code>;</code> .<blockquote>'''إبراز النصوص في ViM'''</blockquote><blockquote>استخدم أحد الأوامر الثلاثة التالية من أجل إبراز النصوص (Text Highlighting) في محرر ViM:</blockquote><blockquote><code>syntax enable:</code> أو <code>sy enable:</code> أو <code>syn enable:</code></blockquote><blockquote>من المفيد إضافة ذلك الإعداد إلى ملف <code>vimrc.</code> من أجل تثبيته كإعداد افتراضي.</blockquote>ضع أوامر يونكس في الملف الذي أنشأته كما لو كنت ستكتب تلك الأوامر في سطر الأوامر (انظر [[Bash/executing commands|تنفيذ الأوامر في Bash]]). يمكن أن تكون تلك الأوامر دوال للصدفة أو أوامر مضمَّنة فيها أو أوامر يونكس أو غير ذلك.
+
لكن ما قد يجعلك تستخدم محررًا متطورًا مثل VIM أو emacs على ما سواهما هو أنه يمكنك تهيئتهما للتعرف على النصوص التي تكتبها وإبرازها بألوان مختلفة -ومن ذلك نصوص وأوامر الصدفة التي سنكتبها-، وذلك يقلل الأخطاء التي يقع فيها المبتدئون عادة مثل إغفال إغلاق قوسين <code>()</code> أو نسيان الفواصل المنقوطة <code>;</code> .<blockquote>'''إبراز النصوص في VIM'''</blockquote><blockquote>استخدم أحد الأوامر الثلاثة التالية من أجل إبراز النصوص (Text Highlighting) في محرر VIM:</blockquote><blockquote><code>syntax enable:</code> أو <code>sy enable:</code> أو <code>syn enable:</code></blockquote><blockquote>من المفيد إضافة ذلك الإعداد إلى ملف <code>vimrc.</code> من أجل تثبيته كإعداد افتراضي.</blockquote>ضع أوامر يونكس في الملف الذي أنشأته كما لو كنت ستكتب تلك الأوامر في سطر الأوامر (انظر [[Bash/executing commands|تنفيذ الأوامر في Bash]]). يمكن أن تكون تلك الأوامر دوال للصدفة أو أوامر مضمَّنة فيها أو أوامر يونكس أو غير ذلك.
  
 
والآن أعط ذلك الملف اسمًا يصف المهام التي ينفذها وتأكد ألا يتعارض الاسم مع أوامر موجودة مسبقًا، ولضمان ذلك فإن أسماء برامج الصدفة تنتهي غالبًا بـ <code>sh.</code>، لكن هذا لا يمنع وجود شيفرات نصية أخرى في النظام بنفس الاسم الذي تختاره، فابحث في النظام عن ملفات أو شيفرات نصية بنفس الاسم باستخدام أوامر البحث في الملفات والبرامج مثل <code>which</code> أو <code>whereis</code>:<syntaxhighlight lang="bash">
 
والآن أعط ذلك الملف اسمًا يصف المهام التي ينفذها وتأكد ألا يتعارض الاسم مع أوامر موجودة مسبقًا، ولضمان ذلك فإن أسماء برامج الصدفة تنتهي غالبًا بـ <code>sh.</code>، لكن هذا لا يمنع وجود شيفرات نصية أخرى في النظام بنفس الاسم الذي تختاره، فابحث في النظام عن ملفات أو شيفرات نصية بنفس الاسم باستخدام أوامر البحث في الملفات والبرامج مثل <code>which</code> أو <code>whereis</code>:<syntaxhighlight lang="bash">
سطر 22: سطر 22:
 
سنستخدم في هذا المثال أمر <code>echo</code> لطباعة إشعارات على الشاشة تخبر المستخدم بما سيحدث قبل أن تُنفّذ كل مهمة، ذلك أن من المهم إخبار المستخدم بما يجري لتجنب فزع المستخدم بسبب أنه يشعر أن البرنامج "لا يفعل أي شيء". انظر تفصيل إشعار المستخدم في كتابة برامج Bash تفاعلية.
 
سنستخدم في هذا المثال أمر <code>echo</code> لطباعة إشعارات على الشاشة تخبر المستخدم بما سيحدث قبل أن تُنفّذ كل مهمة، ذلك أن من المهم إخبار المستخدم بما يجري لتجنب فزع المستخدم بسبب أنه يشعر أن البرنامج "لا يفعل أي شيء". انظر تفصيل إشعار المستخدم في كتابة برامج Bash تفاعلية.
  
'''شكل 2.1: script1.sh''' <!-- إضافة صورة script1.sh، إذ فشلت إضافتها. -->
+
'''الملف script1.sh'''<syntaxhighlight lang="bash">
 +
#!/bin/bash
  
ربما يجب أن تدرب نفسك على كتابة برامج للصدفة بكتابة هذا المثال في الصورة بنفسك، كذلك من المفيد إنشاء مجلد <code>scripts/~</code> لحفظ شيفراتك النصية فيه، ثم أضف ذلك المجلد إلى محتويات المتغير <code>PATH</code> كما يلي:<syntaxhighlight lang="bash">
+
clear
 +
 
 +
echo "The script starts now."
 +
 
 +
echo "Hi, $USER!"
 +
echo
 +
 
 +
echo "I will now fetch you a list of conntected users:"
 +
echo
 +
w
 +
echo
 +
 
 +
echo "I'm setting two variables now."
 +
COLOR="black"
 +
VALUE="9"
 +
echo "This is a string: $COLOR"
 +
echo "And this is a number: $VALUE"
 +
echo
 +
 
 +
echo "I'm giving you back your prompt now."
 +
echo
 +
 
 +
</syntaxhighlight>ربما يجب أن تدرب نفسك على كتابة برامج للصدفة بكتابة هذا المثال في الصورة بنفسك، كذلك من المفيد إنشاء مجلد <code>scripts/~</code> لحفظ شيفراتك النصية فيه، ثم أضف ذلك المجلد إلى محتويات المتغير <code>PATH</code> كما يلي:<syntaxhighlight lang="bash">
 
export PATH="$PATH:~/scripts"
 
export PATH="$PATH:~/scripts"
</syntaxhighlight>استخدم محررًا يدعم إبراز النصوص لأوامر الصدفة إن كنت مبتدئًا، وستجد تلك الخاصية مدعومة في محررات مثل vim - gvim - (x)emacs- kwrite إضافة إلى محررات أخرى، لذا تأكد من دعم المحرر الذي تستخدمه لخاصية إبراز النصوص (Text Highlighting) بالنظر في توثيق ذلك المحرر.<blockquote>'''المِحثات المختلفة'''</blockquote><blockquote>قد تختلف المِحثَّات المستخدمة في هذا الشرح لتحاكي مواقف الحياة العملية الحقيقية بدلًا عن استخدام محث <code>$</code> الذي يكثر استخدامه في الشروحات. غير أن محث المستخدم الجذر سيظل ثابتًا في الشرح، وسيكون <code>#</code>.</blockquote>
+
</syntaxhighlight>استخدم محررًا يدعم إبراز النصوص لأوامر الصدفة إن كنت مبتدئًا، وستجد تلك الخاصية مدعومة في محررات مثل VIM - gvim - (x)emacs- kwrite إضافة إلى محررات أخرى، لذا تأكد من دعم المحرر الذي تستخدمه لخاصية إبراز النصوص (Text Highlighting) بالنظر في توثيق ذلك المحرر.<blockquote>'''المِحثات المختلفة'''</blockquote><blockquote>قد تختلف المِحثَّات المستخدمة في هذا الشرح لتحاكي مواقف الحياة العملية الحقيقية بدلًا عن استخدام محث <code>$</code> الذي يكثر استخدامه في الشروحات. غير أن محث المستخدم الجذر سيظل ثابتًا في الشرح، وسيكون <code>#</code>.</blockquote>
  
 
== تنفيذ البرنامج ==
 
== تنفيذ البرنامج ==
يكون البرنامج قابلًا للتنفيذ لمن يحق له ذلك، أي لمن يمنح له صاحب البرنامج إذن تنفيذه، فتأكد أن تحصل على الأذونات التي تريدها أثناء ضبط أذونات البرنامج، وبعدها تستطيع تشغيل البرنامج كما تشغِّل أي أمر في الصدفة:<syntaxhighlight lang="bash">
+
يكون البرنامج قابلًا للتنفيذ لمن يحق له ذلك، أي لمن يمنح له صاحب البرنامج إذن تنفيذه، فتأكد أن تحصل على الأذونات التي تريدها أثناء ضبط أذونات البرنامج، وبعدها تستطيع تشغيل البرنامج كما تشغِّل أي أمر في الصدفة:<syntaxhighlight lang="text">
os@Inspiron:~/scripts$ chmod u+x script1.sh
+
wiki@hsoub:~/scripts$ chmod u+x script1.sh
  
os@Inspiron:~/scripts$ ls -l script1.sh 
+
wiki@hsoub:~/scripts$ ls -l script1.sh 
-rwxrwxr-x 1 os os 331 Jul 31 03:12 script1.sh
+
-rwxrwxr-x 1 wiki wiki 331 Jul 31 03:12 script1.sh
  
os@Inspiron:~/scripts$ script1.sh
+
wiki@hsoub:~/scripts$ script1.sh
 
The script starts now.
 
The script starts now.
Hi, os!
+
Hi, wiki!
  
 
I will now fetch you a list of connected users:
 
I will now fetch you a list of connected users:
سطر 43: سطر 66:
 
 03:12:48 up  3:42,  1 user,  load average: 1.33, 1.51, 1.67
 
 03:12:48 up  3:42,  1 user,  load average: 1.33, 1.51, 1.67
 
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
 
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
os       tty7     :0               23:30    3:42m 12:51   0.63s /usr/lib/gnome-session/gnome
+
wiki     tty7     :0               23:30    3:42m 12:51   0.63s /usr/lib/gnome-session/gnome
  
 
I'm setting two variables now.
 
I'm setting two variables now.
سطر 51: سطر 74:
 
I'm giving you back your prompt now.
 
I'm giving you back your prompt now.
  
os@Inspiron:~/scripts$ echo $COLOUR
+
wiki@hsoub:~/scripts$ echo $COLOUR
  
os@Inspiron:~/scripts$ echo $VALUE
+
wiki@hsoub:~/scripts$ echo $VALUE
  
os@Inspiron:~/scripts$
+
wiki@hsoub:~/scripts$
  
 
</syntaxhighlight>تلك هي أكثر الطرق شيوعًا لتنفيذ برنامج نصي للصدفة، ويُفضَّل تنفيذ مثل تلك البرامج في صدفة فرعية (subshell)، إذ ستكون المتغيرات والدوال والأوامر البديلة (aliases) التي أنشئت في تلك الصدفة الفرعية معرَّفة لهذه الجلسة من Bash لتلك الصدفة الفرعية فقط، ويعود كل شيء كما كان عليه عندما تُغلَق تلك الصدفة ويعود التحكم للصدفة الأم مرة أخرى، إذ يُنَظَّف كل شيء وتلغى كل التغييرات التي أحدثها البرنامج للصدفة.
 
</syntaxhighlight>تلك هي أكثر الطرق شيوعًا لتنفيذ برنامج نصي للصدفة، ويُفضَّل تنفيذ مثل تلك البرامج في صدفة فرعية (subshell)، إذ ستكون المتغيرات والدوال والأوامر البديلة (aliases) التي أنشئت في تلك الصدفة الفرعية معرَّفة لهذه الجلسة من Bash لتلك الصدفة الفرعية فقط، ويعود كل شيء كما كان عليه عندما تُغلَق تلك الصدفة ويعود التحكم للصدفة الأم مرة أخرى، إذ يُنَظَّف كل شيء وتلغى كل التغييرات التي أحدثها البرنامج للصدفة.
سطر 71: سطر 94:
 
source script_name.sh
 
source script_name.sh
 
</syntaxhighlight><blockquote>'''source=.'''</blockquote><blockquote>يرادف أمرُ <code>source</code> المٌضمَّن في صدفة Bash أمرَ <code>.</code> في صدفة بورن.</blockquote>لا تحتاج الصدفة أي أذونات تنفيذ في تلك الحالة، وتُنفَّذ الأوامر في السياق الحالي للصدفة، لذا فإن أي تغييرات تحدث لبيئتك الحالية ستكون ظاهرة وباقية بعد انتهاء تنفيذ البرنامج:<syntaxhighlight lang="bash">
 
</syntaxhighlight><blockquote>'''source=.'''</blockquote><blockquote>يرادف أمرُ <code>source</code> المٌضمَّن في صدفة Bash أمرَ <code>.</code> في صدفة بورن.</blockquote>لا تحتاج الصدفة أي أذونات تنفيذ في تلك الحالة، وتُنفَّذ الأوامر في السياق الحالي للصدفة، لذا فإن أي تغييرات تحدث لبيئتك الحالية ستكون ظاهرة وباقية بعد انتهاء تنفيذ البرنامج:<syntaxhighlight lang="bash">
os@os-Inspiron-3521:~/scripts$ source script1.sh
+
wiki@hsoub:~/scripts$ source script1.sh
os@os-Inspiron-3521:~/scripts$ echo $COLOUR
+
wiki@hsoub:~/scripts$ echo $COLOUR
 
black
 
black
  
os@os-Inspiron-3521:~/scripts$ echo $VALUE
+
wiki@hsoub:~/scripts$ echo $VALUE
 
9
 
9
  
os@os-Inspiron-3521:~/scripts$
+
wiki@hsoub:~/scripts$
  
  
سطر 89: سطر 112:
  
 
== مصادر ==
 
== مصادر ==
* [http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_01.html دليل Bash للمبتدئين، فصل 2.1].
+
* [http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_01.html دليل Bash للمبتدئين، صفحة إنشاء وتشغيل برنامج Bash].
 
[[تصنيف:Bash]]
 
[[تصنيف:Bash]]
 
[[تصنيف:Bash Scripts]]
 
[[تصنيف:Bash Scripts]]
 
[[تصنيف:Bash Writing Scripts]]
 
[[تصنيف:Bash Writing Scripts]]
 +
[[تصنيف:Bash Aliases]]

المراجعة الحالية بتاريخ 14:39، 6 سبتمبر 2018

الكتابة والتسمية

إن كان لديك سلسلة أوامر تنفذها بشكل متكرر وتريد اختصار وقت تنفيذها أو تنفيذها بشكل آلي، فيمكنك وضعها في ملف فارغ يكتب بصيغة معينة وتقرؤه الصدفة على أنه برنامج تنفذه عند استدعاءه بكتابة اسم الملف الذي يحويه، وتسمى تلك البرامج ببرامج الصدفة أو شيفرات الصدفة النصية (Shell Scripts).

ويمكن استخدام تلك البرامج لأتمتة المهام باستخدام أداة cron أو في إجراءات الإقلاع وإيقاف التشغيل في أنظمة يونكس، حيث يُحدَّد أسلوب عمل العفاريت (daemons) والخدمات في شيفرات init النصية (init scripts).

ولإنشاء برنامج للصدفة، افتح ملفًا فارغًا في المحرر النصي الذي تفضله، إذ لا يهم هنا نوع المحرر الذي تستخدمه فأغلبها يقوم بالمهمة التي نريدها الآن، وهي كتابة برنامج لصدفة Bash، فاستخدم VIM إن شئت أو emacs أو gedit أو dtpad أو غير ذلك.

لكن ما قد يجعلك تستخدم محررًا متطورًا مثل VIM أو emacs على ما سواهما هو أنه يمكنك تهيئتهما للتعرف على النصوص التي تكتبها وإبرازها بألوان مختلفة -ومن ذلك نصوص وأوامر الصدفة التي سنكتبها-، وذلك يقلل الأخطاء التي يقع فيها المبتدئون عادة مثل إغفال إغلاق قوسين () أو نسيان الفواصل المنقوطة ; .

إبراز النصوص في VIM

استخدم أحد الأوامر الثلاثة التالية من أجل إبراز النصوص (Text Highlighting) في محرر VIM:

syntax enable: أو sy enable: أو syn enable:

من المفيد إضافة ذلك الإعداد إلى ملف vimrc. من أجل تثبيته كإعداد افتراضي.

ضع أوامر يونكس في الملف الذي أنشأته كما لو كنت ستكتب تلك الأوامر في سطر الأوامر (انظر تنفيذ الأوامر في Bash). يمكن أن تكون تلك الأوامر دوال للصدفة أو أوامر مضمَّنة فيها أو أوامر يونكس أو غير ذلك. والآن أعط ذلك الملف اسمًا يصف المهام التي ينفذها وتأكد ألا يتعارض الاسم مع أوامر موجودة مسبقًا، ولضمان ذلك فإن أسماء برامج الصدفة تنتهي غالبًا بـ sh.، لكن هذا لا يمنع وجود شيفرات نصية أخرى في النظام بنفس الاسم الذي تختاره، فابحث في النظام عن ملفات أو شيفرات نصية بنفس الاسم باستخدام أوامر البحث في الملفات والبرامج مثل which أو whereis:

which -a script_name

whereis script_name

locate script_name

script1.sh

سنستخدم في هذا المثال أمر echo لطباعة إشعارات على الشاشة تخبر المستخدم بما سيحدث قبل أن تُنفّذ كل مهمة، ذلك أن من المهم إخبار المستخدم بما يجري لتجنب فزع المستخدم بسبب أنه يشعر أن البرنامج "لا يفعل أي شيء". انظر تفصيل إشعار المستخدم في كتابة برامج Bash تفاعلية.

الملف script1.sh

#!/bin/bash

clear

echo "The script starts now."

echo "Hi, $USER!"
echo

echo "I will now fetch you a list of conntected users:"
echo
w
echo

echo "I'm setting two variables now."
COLOR="black"
VALUE="9"
echo "This is a string: $COLOR"
echo "And this is a number: $VALUE"
echo

echo "I'm giving you back your prompt now."
echo

ربما يجب أن تدرب نفسك على كتابة برامج للصدفة بكتابة هذا المثال في الصورة بنفسك، كذلك من المفيد إنشاء مجلد scripts/~ لحفظ شيفراتك النصية فيه، ثم أضف ذلك المجلد إلى محتويات المتغير PATH كما يلي:

export PATH="$PATH:~/scripts"

استخدم محررًا يدعم إبراز النصوص لأوامر الصدفة إن كنت مبتدئًا، وستجد تلك الخاصية مدعومة في محررات مثل VIM - gvim - (x)emacs- kwrite إضافة إلى محررات أخرى، لذا تأكد من دعم المحرر الذي تستخدمه لخاصية إبراز النصوص (Text Highlighting) بالنظر في توثيق ذلك المحرر.

المِحثات المختلفة

قد تختلف المِحثَّات المستخدمة في هذا الشرح لتحاكي مواقف الحياة العملية الحقيقية بدلًا عن استخدام محث $ الذي يكثر استخدامه في الشروحات. غير أن محث المستخدم الجذر سيظل ثابتًا في الشرح، وسيكون #.

تنفيذ البرنامج

يكون البرنامج قابلًا للتنفيذ لمن يحق له ذلك، أي لمن يمنح له صاحب البرنامج إذن تنفيذه، فتأكد أن تحصل على الأذونات التي تريدها أثناء ضبط أذونات البرنامج، وبعدها تستطيع تشغيل البرنامج كما تشغِّل أي أمر في الصدفة:

wiki@hsoub:~/scripts$ chmod u+x script1.sh

wiki@hsoub:~/scripts$ ls -l script1.sh 
-rwxrwxr-x 1 wiki wiki 331 Jul 31 03:12 script1.sh

wiki@hsoub:~/scripts$ script1.sh
The script starts now.
Hi, wiki!

I will now fetch you a list of connected users:

 03:12:48 up  3:42,  1 user,  load average: 1.33, 1.51, 1.67
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
wiki     tty7     :0               23:30    3:42m 12:51   0.63s /usr/lib/gnome-session/gnome

I'm setting two variables now.
This is a string: black
And this is a number: 9

I'm giving you back your prompt now.

wiki@hsoub:~/scripts$ echo $COLOUR

wiki@hsoub:~/scripts$ echo $VALUE

wiki@hsoub:~/scripts$

تلك هي أكثر الطرق شيوعًا لتنفيذ برنامج نصي للصدفة، ويُفضَّل تنفيذ مثل تلك البرامج في صدفة فرعية (subshell)، إذ ستكون المتغيرات والدوال والأوامر البديلة (aliases) التي أنشئت في تلك الصدفة الفرعية معرَّفة لهذه الجلسة من Bash لتلك الصدفة الفرعية فقط، ويعود كل شيء كما كان عليه عندما تُغلَق تلك الصدفة ويعود التحكم للصدفة الأم مرة أخرى، إذ يُنَظَّف كل شيء وتلغى كل التغييرات التي أحدثها البرنامج للصدفة. إن لم تضع مجلد scripts في متغير PATH ولم يكن المجلد الحالي . فيه كذلك فيمكنك تنفيذ البرنامج بهذا الأمر -يشير script_name إلى اسم برنامجك-:

./script_name.sh

قد يُنفَّذ البرنامج في صدفة بعينها، رغم أننا نفعل هذا إن أردنا الحصول على سلوك معين مثل تفقّد إن كان البرنامج يعمل في صدفة أخرى أو يطبع آثارًا (traces) من أجل التصحيح (debugging):

rbash script_name.sh

sh script_name.sh

bash -x script_name.sh

ستعمل الصدفة المحددة في أي من الأوامر السابقة كصدفة فرعية من صدفتك الحالية وتنفذ البرنامج، قد تقوم بهذا حين تريد للبرنامج أن يعمل بخيارات محددة أو تحت ظروف لم تُحدّد فيه. أما إن أردت تنفيذ البرنامج داخل نفس الصدفة التي أنت فيها فيجب أن تستخدم أمر source أولًا:

source script_name.sh

source=.

يرادف أمرُ source المٌضمَّن في صدفة Bash أمرَ . في صدفة بورن.

لا تحتاج الصدفة أي أذونات تنفيذ في تلك الحالة، وتُنفَّذ الأوامر في السياق الحالي للصدفة، لذا فإن أي تغييرات تحدث لبيئتك الحالية ستكون ظاهرة وباقية بعد انتهاء تنفيذ البرنامج:

wiki@hsoub:~/scripts$ source script1.sh
wiki@hsoub:~/scripts$ echo $COLOUR
black

wiki@hsoub:~/scripts$ echo $VALUE
9

wiki@hsoub:~/scripts$

انظر أيضًا

مصادر