چک لیست
حلقه
شرط درست بودن
ترتیب
اسکریپتهات را طبق بالا تنظیم کن تا کارت راه بیفته دقیقا مثل کاری که علیرضا با زنیتی انجام داده اومده با if گفته اگه شد برو بعدی اگه نشد نوتیفای بده و بسته, شو شما هم شرط بذار اگه شد برو چک لیست بعدی اگه درست جرا نشد حلقه را ادامه نده و نرو چک لیست بعدی و ترتیبش هم با خودت.
@Ehsan-faal
احسان جان توی ترمینال حرف شما صحیح هست مثلا :
pstree > out && cp out out.backup
اما یه اسکریپت مثلا 1000 خطی که یه عالمه سینتکس داره را نمیشه اینجوری کرد اصلا اسکریپتها با دستور /.و sh ران میشن.
مگه اینکه بگی :
sh fs1 && fs2 && fs3
که اینم میگه اگه اجرا شد برو بعدی نمیگه اگه درست اجرا شد برو بعدی .
فکر کن اسکریپت نوشتی تعداد پروسههای ران شده با فلان یوزر را ضرب در دو کنه بده و وقتی رانش میکنه مثلا میگه پروسهها اینا هستند اما عمل ضرب را انجام نمیده در این صورت اسکریپت ران شده اما درست کار نکرده.
اون دستور که دادم فقط میگه اگه خود اسکریپت ران نشد نرو بعدی مثلا میزنی دستور را میگه توی دایرکتوی هوم فایل fs1 نیست و نمیره بعدی ولی اگه بود و رانش کرد میره بعدی و دیگه چک نمی کنه که اسکریپت چی میخواد و چی گفته و ...
ویرایش :میایم یه تست میزنیم که چطور عمل میکنه ( خودم انجام دادم و نشد )
با دستور زیر یه فایل شل درست میکنیم :
nano fs1.sh
اکنون که ادیتور نانو باز شده خطوط زیر را میزاریم توش :
#!/bin/bash
mkdir 2
cd 2
cp 1 2
اسکریپت میگه توی جایی که هستی پوشهی 2 را بساز و بعد برو توی پوشهی دو و فایل 1 را یک کپی ازش بگیر بذار توی فایل 2.
این اسکریپت مشکل دارد چون فایل 1 ساخته نشده.یه اسکریت دیگه هم مینویسیم :
nano fs2.sh
و خطوط زیر را توش میذارم :
#!/bin/bash
mkdir 1
میگه یه پوشه با اسم یک بساز.
حالا به جفتشون دسترسی ران میدیم :
sudo chmod u+x fs1.sh fs2.sh
حالا با دستور زیر رانش میکنیم :
sh fs1.sh && sh fs2.sh
ترمینال پیامی میده که میگه :
no such a file or directory
این پیام را که برای فایل 1 میده مربوط به اسکریپت مشکل دار فایل fs1.sh هست. حالا کافی با دستور زیر ببینیم که آیا پوشهی 1 ساخته شده است یا نه اگه ساخته شده باشد در این شرایط && اصلا کار ساز نیست.
ls
خب توی خروجی 1 دیده میشه پس حرف من تا اینجا درسته.
حالا کافی پوشهی یک را با اسکریپت اول پاک کنیم و دستور را دوباره اجرا کنیم :
sudo rm -R fs1.sh 1
و دوباره :
sh fs1.sh && sh fs2.sh
حالا اگه پوشهی یک ساخته شده باشه بازم حرف من درست بوده که مربوط به اجرا شدن خود فایل هست .
ls
خودتون ببنید که پوشهی 1 ساخته نشده چون اسکریپت اول ران نشده.