المسافة بتقطّع كلمات، مش أوامر
المسافة (أو التاب) بين الكلمات بتفصل حجج نفس الأمر. مش بتشغّل أمر تاني.
echo hello world# أمر واحد: echo# حجتين: hello و worldls -la /tmp# أمر واحد، خيار، ومسارecho hello و echohello مش نفس الحاجة. الأولى أمر echo وحجة. التانية برنامج اسمه echohello، وغالبا مش موجود.
المسافات الزيادة بين الكلمات بتتلم. المسافة في الأول والآخر بتتساب. اللي بيفرق هو إن فيه فاصل كلمات ولا لأ.
المسافة مش عامل بين أوامر. دي مسافة بين كلمات طلبية واحدة.لو الحجة نفسها فيها مسافة، حطها بين تنصيص. من غيرهم الشيل يفتكرها حجتين:
mkdir "كشري ستيشن"# فولدر واحد اسمه فيه مسافةmkdir كشري ستيشن# فولدرين: كشري و ستيشن; أمر بعد ما اللي قبله يخلّص
الفاصلة المنقوطة بتفصل أمرين. الشيل يشغّل الشمال، يستناه يخلّص، وبعدين يشغّل اليمين. حتى لو الشمال فشل.
mkdir menu; cd menu; pwdالسطر الجديد بيعمل نفس وظيفة ;. تلات سطور تحت بعض زي ما تحط ; بينهم. في السكربت بنفضّل سطر لكل أمر عشان يتقرا.
; مش محتاج مسافة حواليه، بس المسافة بتخلّي السطر يتقرا: pwd;ls و pwd ; ls نفس الشغل.
& متستناش. وده مش “و”
& كمان بتفصل أوامر، بس الشمال يشتغل في الخلفية والشيل يكمل فورًا من غير ما يستناه.
sleep 30 &pwdpwd هيطبع دلوقتي، و sleep لسه شغال وراه. الشيل يطبّع رقم العملية. jobs يورّيك اللي في الخلفية. fg يرجّعه قدامك. wait في سكربت يستنى الخلفيات تخلّص.
&& و || بيعتمدوا على النجاح
صفر = نجح. غير كده = فشل.
cmd1 && cmd2 — التاني يشتغل لو الأول رجع صفر. زي “اعمل الفولدر وبعدين ادخله”. لو mkdir فشل، cd ميحصلش.
cmd1 || cmd2 — التاني يشتغل لو الأول فشل. بديل: grep x f || echo مش لاقي.
سلسلة مفيدة:
mkdir -p dist && cd dist && pwdلو حطيت ; بدل &&، cd هيحصل حتى لو الفولدر ما تعملش، وهتلاقي نفسك في حتة تانية وانت فاكر إنك جوه dist.
| مش فاصل أوامر عادي
الـ pipe ياخد مخرج الأمر الشمال ويدخّله مدخل للي يمينه. الاتنين بيشتغلوا مع بعض، مش واحد بعد ما التاني يخلّص ويكتب ملف.
grep -R "TODO" src | wc -lgrep يطلّع السطور، و wc يعدّها. مفيش ملف في النص.
جدول تقفل بيه الفصل
| الكتابة | بيفصل إيه؟ | يستنى؟ | لو الأول فشل |
|---|---|---|---|
| مسافة | كلمات نفس الأمر | أمر واحد | مفيش أمر تاني |
; أو سطر جديد | أمرين ورا بعض | أيوه | التاني يشتغل برضه |
&& | أمرين | أيوه | التاني مايشتغلش |
علامة أو || | أمرين | أيوه | التاني يشتغل |
| ماسورة | مخرج في مدخل | مع بعض | شوف pipefail في فصل السكربت |
& | أمر في الخلفية | لأ | التاني يشتغل فورًا |
خلّصت الفصل لما
١) mkdir كشري ستيشن يعمل فولدر ولا اتنين؟
٢) false; echo hi هيطبع hi؟
; مش بيبص على النجاح.٣) sleep 5 & echo now امتى now تطبع؟
& مش مستني الـ sleep. && كان هيستناه وينجح الأول.