$ باش <ex1
يمكن أن تقرأ في
ex1البرنامج في وتنفيذ
وصيغته العامة هي:
اسم البرنامج النصي $ bash [المعلمة]
على سبيل المثال:
$ bash ex2 /usr/meng /usr/zhang
عملية التنفيذ هي نفس الطريقة السابقة، لكن ميزة هذه الطريقة هي أنها يمكن أن تحتوي على معلمات بعد اسم البرنامج النصي، وبالتالي تمرير قيم المعلمات إلى الأوامر الموجودة في البرنامج، بحيث يمكن لبرنامج Shell النصي التعامل مع مواقف متعددة، تمامًا مثل الوظيفة عند الاتصال، يمكن تمرير المعلمات الفعلية المقابلة وفقًا للمشكلة المحددة.
إذا بدأت بالصدفة الحالية (بدءًا بـ
·يعني) لتنفيذ برنامج Shell النصي، يمكنك استخدام النموذج البسيط التالي:
$ · ex3 [المعلمة]
قم بتعيين أذونات برنامج Shell النصي على أنها قابلة للتنفيذ، ثم قم بتنفيذها مباشرة في الموجه.
طرق محددة:
$ chmod a+x ex4$ ./ex4
يحدد هذا المتطلب Shell المحدد الذي ينفذ البرنامج النصي في بداية البرنامج النصي Shell، على سبيل المثال
/بن/باش:
#!/بن/باش
تتلقى Shell الأمر (اسم البرنامج النصي) الذي أدخله المستخدم وتقوم بتحليله. إذا تم وضع علامة على الملف بأنه قابل للتنفيذ ولكنه ليس برنامجًا مترجمًا، فإن الصدفة تعتبره بمثابة برنامج نصي شل. ستقوم الصدفة بقراءة المحتويات وتفسيرها وتنفيذها. لذا، من وجهة نظر المستخدم، فإن تنفيذ برنامج نصي Shell يشبه تنفيذ ملف عادي قابل للتنفيذ.
لذلك، يمكن أن تتواجد نصوص shell البرمجية التي طورها المستخدم ضمن دليل في مسار البحث عن الأوامر (عادةً
/bin,
/usr/binإلخ)، استخدمه كأمر عادي. بهذه الطريقة، يمكنك تطوير أوامرك الجديدة. تعد هذه الطريقة أكثر ملاءمة إذا كنت تخطط لاستخدام البرنامج النصي المُجهز بشكل متكرر.
يمكنك تعيين نتيجة تنفيذ الأمر إلى متغير. هناك نوعان من استبدال الأوامر: الأول هو استخدام علامات الاقتباس الخلفية للأمر، وشكله العام هو:
قائمة الأوامر.
على سبيل المثال: قم بتخزين اسم المسار الكامل لدليل العمل الحالي في المتغير dir وأدخل سطر الأوامر التالي:
$ دير=`pwd`
شكل آخر هو:
$(قائمة الأوامر). يمكن أيضًا إعادة كتابة سطر الأوامر أعلاه على النحو التالي:
$دير=$(أشخاص ذوي الإعاقة)
سحقيتم توفير صفائف أحادية البعد فقط، ولا يقتصر حجم الصفيف. كما هو الحال في لغة C، يتم ترقيم اشتراكات عناصر المصفوفة بدءًا من 0. للحصول على العناصر في صفيف، استخدم الاشتراكات. يمكن أن يكون الحرف المنخفض عددًا صحيحًا أو تعبيرًا حسابيًا، ويجب أن تكون قيمته أكبر من أو تساوي 0. يمكن للمستخدمين استخدام عبارات المهمة لتعيين قيم لمتغيرات المصفوفة.
الشكل العام لتعيين القيم لعناصر المصفوفة هو:
اسم المصفوفة [منخفض] = القيمة،على سبيل المثال:
$ city[0]=مدينة بكين$[1]=مدينة شنغهاي$[2]=تيانجين
ويمكن أيضا أن تستخدم
يعلنيعلن الأمر بشكل صريح عن مصفوفة، والصيغة العامة هي:
أعلن $ - اسم صفيف
التنسيق العام لقراءة قيم عناصر المصفوفة هو:
${اسم المصفوفة[منخفض]}،على سبيل المثال:
$ echo ${city[0]}بكين
يمكن تعيين كل عنصر في المصفوفة عنصرًا تلو الآخر باستخدام الطريقة المذكورة أعلاه، أو يمكن تعيينها معًا. الصيغة العامة لتعريف المصفوفة وتعيين قيمة أولية لها هي:
اسم الصفيف = (القيمة 1 القيمة 2 ... القيمة ن)
ويتم فصل كل قيمة بمسافات. على سبيل المثال:
$ A=(هذا مثال على برنامج شل النصي)$ echo ${A[0]} ${A[2]} ${A[3]} ${A[6]}هذا مثال على البرنامج النصي$ echo ${ ا[8]}
بما أن هناك 7 قيم أولية في جدول القيم، إذن
أعدد العناصر هو أيضا 7.
أ[8]يتجاوز الصفيف المعين
أالنطاق، فهو يعتبر عنصرًا جديدًا نظرًا لعدم وجود قيمة معينة مسبقًا، فإن قيمته عبارة عن سلسلة فارغة.
إذا لم يتم إعطاء الحرف المنخفض لعنصر المصفوفة، فإن اسم المصفوفة يمثل عنصر المصفوفة بالرمز المنخفض 0، مثل
مدينةيعادل
المدينة[0].
يستخدم
*أو
@عند الاشتراك، سيتم استبدال كافة العناصر الموجودة في المصفوفة.
$ echo ${A[*]} هذا مثال على برنامج شل النصي
$ صدى ${#A[*]}7
إذا كنت تريد كتابة Shell للعثور على مجموع رقمين، فكيف يمكنك تنفيذ ذلك؟ من أجل التعريف باستخدام تمرير المعلمات، اكتب نصًا مثل هذا:
$ cat > addlet sum=$1+$2echo $sum
بعد الحفظ قم بتنفيذ الأمر:
$ chmod a+x ./add$ ./add 5 1015
يمكن أن نرى أنه تم تمرير 5 و 10 إلى
1 دولارو
2 دولار، هذا هو ترتيب المعلمات المحدد مسبقًا لـ Shell، في الواقع، يمكنك أيضًا تحديد المتغيرات أولاً ثم تمريرها.
على سبيل المثال، قم بتعديل البرنامج النصي أعلاه للحصول على:
دع المبلغ=$X+$Yecho $sum
نفذ مرة أخرى:
$ X=5 ص=10 ./add15
يمكن العثور على أنه يمكن أيضًا الحصول على النتائج الصحيحة.
تصدير متغير البيئة:
$ تصدير opid = صحيح
هذا كل شيء، إذا كنت تريد أن يصبح ساري المفعول بعد تسجيل الدخول، يمكنك إضافته مباشرة إلى
/ الخ / الملف الشخصيأو
~/.bashrcداخل.
يمكن أن تمر
يقرألقراءة قيمة متغيرة، على سبيل المثال، لانتظار قيام المستخدم بإدخال قيمة وعرضها:
$ read -p الرجاء إدخال القيمة: input ; echo لقد أدخلت القيمة: $input الرجاء إدخال القيمة: 21500 لقد أدخلت القيمة: 21500
لا ينبغي تعديل بعض متغيرات Shell المهمة بعد التعيين، لذا يمكنك ضبطها عليها
للقراءة فقط:
$ oracle_home=/usr/Oracle7/bin$ للقراءة فقط oracle_home
القواعد:
تعبير الاختباريُرجع صحيحًا إذا كان التعبير صحيحًا، وإلا يُرجع خطأ.
أولاً، يتم إعطاء رموز المقارنة الشائعة المستخدمة في المقارنات العددية:
-eg =; -gt >; -ge >=;
اختبار $ var1 -gt var2
يعتمد ما إذا كان الملف قابلاً للقراءة والكتابة والتنفيذ على ما إذا كان ملفًا عاديًا وما إذا كان دليلاً:
-r; -x;
$ اختبار -r اسم الملف
طول السلسلة صفر:
-ضغير الصفر:-ن،يحب:
اختبار $ -z s1
إذا سلسلة
S1الطول هو صفر ويعود صحيحًا.
متساوي
s1=s2؛ لا يساويs1!=s2
هناك طريقة أخرى لمقارنة السلاسل (يمكنك مقارنتها بالترتيب المعجمي):
$ if [[ 'abcde' < 'abcdf' ]]; ثم ردد نعم، كما هو متوقع، نعم، كما هو متوقع؛
العمليات التي يمكن إجراؤها باستخدام هذا الأمر هي:
العمليات الحسابية:
+ - * / %؛ عملية منطقية:=!<<=>>=
يحب:
$i=5;expr $i+5
فضلاً عن ذلك،
قبل الميلادهي آلة حاسبة لسطر الأوامر يمكنها إجراء بعض العمليات الحسابية.
لومثال على الأمر: إذا كانت المعلمة الأولى اسم ملف شائع، فاطبع الملف في الصفحات؛ وإلا، إذا كان اسم دليل، فأدخل الدليل واطبع جميع الملفات الموجودة في الدليل، وإذا لم يكن دليلاً، فاطلب المعلومات ذات الصلة .
إذا test -f $1then pr $1>/dev/lp0elif test-d $1then (cd $1;pr *>/dev/lp0)else echo $1 ليس ملفًا ولا دليلًا
قضيةالأمر عبارة عن أمر فرعي متعدد الاتجاهات يعتمد على مطابقة النمط. وسيحدد ما يلي مجموعة الأوامر التي سيتم تنفيذها بعد ذلك بناءً على إدخال لوحة المفاتيح الخاصة بالمستخدم.
while [ $reply!=y ] && [ $reply!=Y ] # عبارة الحلقة التي سنتعلمها أدناه تفعل الصدى nهل تريد المتابعة؟(Y/N)c اقرأ الرد #اقرأ حالة لوحة المفاتيح $replay in ( y|Y)break;; #Exit the الحلقة (n|N) echo nnTerminatingnexit 0;; echo nnيرجى الإجابة بـ y أو n continue; لمواصلة ايساكدون
القواعد:
بينما/حتى قائمة الأوامر 1do قائمة الأوامر 2done
الفرق هو أنه بعد تنفيذ الأول لجدول الأوامر 1، إذا كانت حالة الخروج صفرًا، فقم بالتنفيذ
يفعلستعود بعد ذلك قائمة الأوامر 2 التالية إلى نقطة البداية، وبعد تنفيذ الأخيرة لقائمة الأوامر 1، ستنفذ عمليات مماثلة فقط إذا كانت حالة الخروج غير صفر. نفس المثال على النحو الوارد أعلاه.
القواعد:
لاسم المتغير في جدول السلسلة، قم بعمل جدول الأوامر
مثال:
FILE=test1.c myfile1.f pccn.hfor i in $FILEdo cd ./tmp cp $i $i.old echo $idone منسوخ
الآن دعونا نلقي نظرة على استخدام الوظائف في Shell دعونا نلقي نظرة على مثال أولاً: اكتب دالة ثم قم باستدعائها للعرض
مرحبا بالعالم!
$ cat > show# تعريف الوظيفة function show{ echo $1$2;}H=Hello,W=World!# استدعاء الوظيفة وتمرير معلمتين H وWshow $H $W
العرض التوضيحي:
$ chmod 770 show$./showHello,World!
هل رأيت شيئاً مريباً؟
$ إظهار $H $W
يمكننا متابعة اسم الوظيفة مباشرة مع المعلمات الفعلية.
ترتيب المعلمات الفعلية يتوافق مع "المعلمات الافتراضية"
1 دولار، 2 دولار، 3 دولار…
ملاحظة: إذا كنت تريد تمرير معلمة، ماذا يجب أن تفعل إذا كانت هناك مسافات في منتصف المعلمة؟ جربها أولاً.
للعرض
مرحبا بالعالم(هناك مسافة بين الكلمتين)
عرض الدالة{ echo $1}HW=Hello Worldshow $HW
إذا مباشرة
إظهار $HW، بالتأكيد غير ممكن، لأن
1 دولارتلقى فقط
مرحبًا، وبالتالي فإن النتائج تظهر فقط
مرحبًاوالسبب هو أنه يجب استخدام متغيرات السلسلة تحتوي عليه.
إذا كنت مهتما، مواصلة التعلم!
هناك العديد من الأشياء القوية في انتظارك، مثل
يقطع,
EXPR,
سيد,
محرجإلخ.