الأمر · فصل ٣

المسافة و ; و & مش نفس الحاجة

whitespace · semicolon · ampersand · && · || · pipe
🎯 الهدف: تفرّق كلمة جوه أمر، عن أمر وراه أمر، عن أمر يتسيّب في الخلفية.

المسافة بتقطّع كلمات، مش أوامر

المسافة (أو التاب) بين الكلمات بتفصل حجج نفس الأمر. مش بتشغّل أمر تاني.

terminal
echo hello world# أمر واحد: echo# حجتين: hello و worldls -la /tmp# أمر واحد، خيار، ومسار

echo hello و echohello مش نفس الحاجة. الأولى أمر echo وحجة. التانية برنامج اسمه echohello، وغالبا مش موجود.

المسافات الزيادة بين الكلمات بتتلم. المسافة في الأول والآخر بتتساب. اللي بيفرق هو إن فيه فاصل كلمات ولا لأ.

المسافة مش عامل بين أوامر. دي مسافة بين كلمات طلبية واحدة.

لو الحجة نفسها فيها مسافة، حطها بين تنصيص. من غيرهم الشيل يفتكرها حجتين:

terminal
mkdir "كشري ستيشن"# فولدر واحد اسمه فيه مسافةmkdir كشري ستيشن# فولدرين: كشري  و  ستيشن

; أمر بعد ما اللي قبله يخلّص

الفاصلة المنقوطة بتفصل أمرين. الشيل يشغّل الشمال، يستناه يخلّص، وبعدين يشغّل اليمين. حتى لو الشمال فشل.

terminal
mkdir menu; cd menu; pwd

السطر الجديد بيعمل نفس وظيفة ;. تلات سطور تحت بعض زي ما تحط ; بينهم. في السكربت بنفضّل سطر لكل أمر عشان يتقرا.

; مش محتاج مسافة حواليه، بس المسافة بتخلّي السطر يتقرا: pwd;ls و pwd ; ls نفس الشغل.

& متستناش. وده مش “و”

& كمان بتفصل أوامر، بس الشمال يشتغل في الخلفية والشيل يكمل فورًا من غير ما يستناه.

terminal
sleep 30 &pwd

pwd هيطبع دلوقتي، و sleep لسه شغال وراه. الشيل يطبّع رقم العملية. jobs يورّيك اللي في الخلفية. fg يرجّعه قدامك. wait في سكربت يستنى الخلفيات تخلّص.

&& و || بيعتمدوا على النجاح

صفر = نجح. غير كده = فشل.

&&

cmd1 && cmd2 — التاني يشتغل لو الأول رجع صفر. زي “اعمل الفولدر وبعدين ادخله”. لو mkdir فشل، cd ميحصلش.

||

cmd1 || cmd2 — التاني يشتغل لو الأول فشل. بديل: grep x f || echo مش لاقي.

سلسلة مفيدة:

terminal
mkdir -p dist && cd dist && pwd

لو حطيت ; بدل &&، cd هيحصل حتى لو الفولدر ما تعملش، وهتلاقي نفسك في حتة تانية وانت فاكر إنك جوه dist.

| مش فاصل أوامر عادي

الـ pipe ياخد مخرج الأمر الشمال ويدخّله مدخل للي يمينه. الاتنين بيشتغلوا مع بعض، مش واحد بعد ما التاني يخلّص ويكتب ملف.

terminal
grep -R "TODO" src | wc -l

grep يطلّع السطور، و wc يعدّها. مفيش ملف في النص.

جدول تقفل بيه الفصل

الكتابةبيفصل إيه؟يستنى؟لو الأول فشل
مسافةكلمات نفس الأمرأمر واحدمفيش أمر تاني
; أو سطر جديدأمرين ورا بعضأيوهالتاني يشتغل برضه
&&أمرينأيوهالتاني مايشتغلش
علامة أو ||أمرينأيوهالتاني يشتغل
ماسورةمخرج في مدخلمع بعضشوف pipefail في فصل السكربت
&أمر في الخلفيةلأالتاني يشتغل فورًا

خلّصت الفصل لما

🧠 اختبر نفسك
١) mkdir كشري ستيشن يعمل فولدر ولا اتنين؟
اتنين. المسافة قطعتهم لحجتين. التنصيص يخلّيهم واحد.
٢) false; echo hi هيطبع hi؟
أيوه. ; مش بيبص على النجاح.
٣) sleep 5 & echo now امتى now تطبع؟
فورًا. & مش مستني الـ sleep. && كان هيستناه وينجح الأول.