آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

فهرست پرسش و پاسخ‌های bash

فهرست پرسش و پاسخ‌ها

  • ◯ فهرست

    1. چطور می‌توانم یک فایل(جریان داده، متغیر) را سطر به سطر بخوانم(و یا فیلد به فیلد)؟
    2. چگونه می‌توانم مقدار برگشتی یا خروجی دستوری را در یک متغیر ذخیره نمایم؟
    3. چطور می‌توانم آخرین(جدیدترین، قدیمی‌ترین، مسن‌ترین) فایل در یک دایرکتوری را پیدا کنم؟
    4. چگونه بررسی نمایم که آیا یک شاخه، خالی است یا خیر؟ چطور هر فایل ‎*.mpg‎ را بررسی کنم، یا تعداد آنها را شمارش کنم؟
    5. چگونه می توانم از متغیرهای آرایه‌ای استفاده کنم؟
    6. چطور می‌توانم از متغیرهای بی‌ثبات(متغیرهای غیر مستقیم، اشاره‌گرها، مرجع‌ها) یا آرایه‌های شرکت‌پذیر استفاده کنم؟
    7. آیا تابعی وجود دارد که طول یک رشته را بازگرداند؟
    8. چگونه می‌توانم تمام فایلها را به طور بازگشتی برای یک رشته جستجو نمایم؟
    9. میانگیری(buffering) چیست؟ یا، چرا این سطر فرمان من خروجی ندارد:    ‎ tail -f logfile | grep 'foo bar' | awk ...‎
    10. چطور می‌توانم یک ساختار دایرکتوری سلسله مراتبی بدون فایل ایجاد نمایم؟
    11. چگونه می‌توانم سطر شماره n از یک فایل را چاپ کنم؟
    12. به چه طریق می‌توانم یک فرمان شل را از یک برنامه غیرپوسته‌ای فراخوانی نمایم؟
    13. چگونه می‌توانم دو متغیر را به هم الحاق کنم؟ چگونه یک رشته را در یک متغیر اضافه(پیوست) کنم؟
    14. چطور می‌توانم چند دستور را در یک مرحله تغییر مسیر بدهم؟
    15. چگونه می‌توانم یک دستور را با تمام فایل‌های دارای پسوند ‎ .gz‎ اجرا کنم؟
    16. چگونه می‌توانم از AND/OR/NOT منطقی در الگو(جانشین) پوسته استفاده کنم؟
    17. چگونه می‌توانم عبارت‌ها را گروه‌بندی کنم، مثل ‎ (a AND b) OR c‎؟
    18. چگونه می‌توانم از اعدادی که با صفر شروع می‌شوند مثل 01 و 02 در یک حلقه استفاده کنم؟
    19. به کدام طریقه می‌توانم یک فایل را به محدوده‌هایی از سطرها، مانند سطرهای 1-10، 11-20، 21-30 تجزیه کنم؟
    20. چطور می‌توانم نام فایل‌های شامل کاراکتر فاصله یا سطر جدید یا هر دو را پیدا کرده وبا آنها کار کنم؟
    21. چگونه می‌توانم یک رشته را با رشته دیگری در یک متغیر، جریان داده، یک فایل، یاتمام فایلهای یک شاخه، تعویض نمایم؟
    22. چگونه می‌توانم به جای فقط اعداد صحیح، اعداد با ممیز شناور را در محاسبه استفاده کنم؟
    23. من می‌خواهم به پوسته محاوره‌ای که مستعارها و توابع ویژه‌ای دارد، نه آنها که در ‎ ~/.bashrc‎ کاربر هست، متصل شوم.
    24. من متغیرهایی را در حلقه تنظیم می‌کنم. چرا به طور ناگهانی پس از اتمام حلقه آنها ناپدید می‌شوند؟ یا، چرا نمی‌توانم داده را برای خواندن لوله‌کشی کنم؟
    25. چطور می‌توانم پارامترهای موضعی(مکانی) بعد از ‎ $9‎ را دستیابی کنم
    26. از چه طریق می‌توانم ترتیب سطرهای فایلی را تصادفی نمایم(بُر زدن)؟(یا یک سطر اتفاقی از فایل را انتخاب کنم، یا انتخاب یک فایل به طور تصادفی از یک شاخه.)
    27. چطور می‌توان دو پردازش جداگانه را به هم ارتباط داد؟
    28. چگونه می‌توانم محل اسکریپت خود را تعیین کنم؟ می‌خواهم فایلهای پیکربندی را از همان محل بخوانم.
    29. به چه طریق می‌توانم مقصد یک پیوند نمادین را نمایش بدهم؟
    30. چگونه می‌توانم تمام فایل‌های ‎ *.foo‎ را به ‎*.bar‎ تبدیل نمایم، یا فاصله‌ها را به خط زیر تبدیل کنم، و یا حروف بزرگ نام فایلها را به حروف کوچک تبدیل کنم؟
    31. تفاوت بین test و ‎[‎ و ‎ [[‎ چیست؟
    32. چطور می‌توانم خروجی 'time' را به یک متغیر یا فایل تغییر مسیر بدهم؟
    33. چگونه می‌توانم شماره شناسایی پردازشی با دادن نام آن پردازش به دست آورم؟
    34. آیا می‌توانم در Bash یک چرخنده اجرا کنم؟
    35. چگونه می‌توانم شناسه‌های( گزینه‌های ) خط‌فرمان را به آسانی مدیریت کنم؟
    36. چطور می‌توانم تمام سطرهایی را به دست آورم که: در هر دو فایل هستند(فصل مشترک) یا فقط در یکی از دوفایل می‌باشند(تفاوتها).
    37. چطور می‌توانم متن را با رنگهای مختلف چاپ کنم؟
    38. مجوزهای فایل در یونیکس چگونه کار می‌کنند؟
    39. تمام فایلهای نقطه‌ای که bash می‌خواند کدام هستند؟
    40. چگونه می‌توانم از dialog برای دریافت ورودی کاربر استفاده کنم؟
    41. چطور می‌توانم تعیین نمایم که آیا یک متغیر شامل یک زیر رشته هست؟
    42. چگونه می‌توانم دریابم که یک پردازش هنوز در حال اجرا است؟
    43. چرا job من در crontab ناموفق است؟‎ 0 0 * * * some command > /var/log/mylog.`date +%Y%m%d`‎
    44. چطور می‌توانم نوار پیشروی ایجاد کنم؟ چگونه می‌توانم موقع کپی یا انتقال فایلها، نمایشگر پیشروی را ببینم؟
    45. به چه طریق می‌توانم مطمئن شوم که فقط یک نمونه از اسکریپت در یک زمان معین در حال اجرا است(ممانعت دوطرفه)؟
    46. می‌خواهم بررسی کنم که آیایک کلمه در یک لیست وجود دارد( یایک عنصر عضوی از یک مجموعه هست).
    47. چطور می‌توانم stderr را به یک لوله تغییر مسیر بدهم؟
    48. فرمان eval و مسائل امنیت
    49. چگونه می‌توانم به روزرسانی‌های دوره‌ای یا پیوست کردن‌ها به یک فایل راببینم؟(مثل: رشد فایل log )
    50. من سعی دارم دستوری را در یک متغیر قرار بدهم، اما موارد پیچیده همیشه ناموفق است!
    51. من جستجوی تاریخچه درست مانند آن در tcsh می‌خواهم. چطور می‌توانم آن را به کلیدهای up و down مربوط کنم؟
    52. چطور می‌توانم یک فایل را از فرمت DOS به فرمت UNIX تبدیل کنم( CRها را از CR-LF خاتمه دهنده سطرها حذف کنم)؟
    53. من یک اعلان فرمان تفننی رنگی دارم، اما حالا به نظر نمی‌رسد bash بداند پهنای ترمینال من چقدر است. سطرها به طور نادرستی شکسته می‌شوند.
    54. چگونه می‌توانم بگویم که یک متغیر آیا محتوی یک عدد معتبر هست؟
    55. به طور کلی در باره ‎2>&1‎ بگویید -- تفاوت بین ‎2>&1 >foo‎ و ‎>foo 2>&1‎ چیست، و چه‌وقت می‌توانم از هرکدام استفاده کنم؟
    56. چطور می‌توانم چند فایل را به طور یکجا untar (یا unzip) نمایم؟
    57. چطور می‌توانم اقلام را گروه‌بندی نمایم(در یک فایل با پیشوندهای مشترک)؟
    58. آیا bash می‌تواند داده‌های باینری را اداره کند؟
    59. من این دستور را در جایی دیدم: ‎:(){ :|:& }‎ (بمب خوشه‌ای). این چطور کار می‌کند؟
    60. من سعی می‌کنم اسکریپتی بنویسم که دایرکتوری جاری را تغییر دهد( یا یک متغیر را تنظیم کند)، اما بعد از به پایان رسیدن اسکریپت، در همان جایی هستم که از آنجا شروع کرده بودم(یا متغیر من نیست)!
    61. آیا لیستی از ویژگی‌های اضافه شده به یک نگارش معین Bash وجود دارد؟
    62. چطور می‌توانم در یک حالت ایمِن، یک فایل موقتی ایجاد کنم؟
    63. وقتی من می‌خواهم بعد از اجرای یک job پس‌زمینه‌ای راه دور قطع ارتباط کنم، سرویس‌گیرنده ssh من هنگ می‌کند !
    64. چرا دریافت پاسخ پرسشی که من در ‎ #bash‎ پرسیدم، تا این اندازه دشوار است؟
    65. آیا یک دستور "PAUSE" مانند آن که در اسکریپتهای MSDOS هست، در bash وجود دارد؟ که به کاربر اعلام نماید جهت ادامه کلیدی را بزند؟
    66. می‌خواهم عبارت ‎if  [[ $var == foo || $var == bar || $var == more ... ]]‎ را بدون n مرتبه تکرار ‎$var‎، بررسی کنم.
    67. چطور می‌توانم فضای سفید قبل یا بعد یکی از متغیرهایم را پاک کنم؟
    68. چگونه می‌توانم فرمانی را اجرا کنم و انصراف از آن پس از N ثانیه را داشته باشم(timeout)؟
    69. می‌خواهم یک ارتباط ssh (یا scp، یا sftp) را خودکار نمایم، اما نمی‌دانم چطور کلمه عبور را ارسال کنم
    70. چطور می‌توانم زمان یونیکس(epoch) را به مقادیر قابل خوندن انسانی تبدیل نمایم؟
    71. چطور می‌توانم یک کاراکتر اسکی را به مقدار دسیمال(یا هگزادسیمال) آن و برعکس تبدیل نمایم؟
    72. چگونه می‌توانم مطمئن شوم که محیط من برای برنامه‌های cron، batch، و jobs پیکربندی شده است؟
    73. چگونه می‌توانم از بسط پارامتر استفاده کنم؟ چطور زیر رشته‌ها را ایجاد کنم؟ چگونه می‌توانم نام فایل را بدون پسوند کنم، یا فقط پسوند فایل‌ها را به دست آورم؟
    74. چگونه می‌توانم اثرات بسط پارامترهای جالب Bash را درپوسته‌های قدیمی‌تر داشته باشم؟
    75. چطور می‌توانم از فرمان find استفاده کنم؟ من به هیچ وجه نمی‌توانم صفحه man را درک کنم!
    76. چگونه می‌توانم حاصل جمع تمام اعداد در یک ستون را به دست آورم؟
    77. از چه طریق می‌توانم تاریخچه را در فایل log ثبت کنم یا bash را در برابر پاک کردن آن ایمن نمایم؟
    78. من می‌خواهم یک کلمه عبور کاربر را با استفاده ازفرمان passwd یونیکس ایجاد کنم، اما چطور آن را در اسکریپت قرار بدهم؟ ورودی استاندارد را نمی‌خواند!
    79. چطور می‌توانم grep را برای یافتن سطرهای شاملfoo و bar همچنین foo یا bar به کار ببرم؟ یا برای فایل‌های شامل foo و bar، شاید در سطرهای جداگانه؟
    80. چگونه می‌توانم مستعاری ایجاد کنم که یک شناسه دریافت کند؟
    81. چگونه می‌توانم تعیین کنم که یک فرمان آیا در جایی از PATH من وجود دارد؟
    82. چرا‎ $(...) ‎نسبت به ‎ `...` ‎  (نقل‌قول برعکس) ارجحیت دارد؟
    83. چگونه می توانم تعیین کنم که یک متغیر آیا قبلاً تعریف شده است؟
    84. چگونه یک رشته (یا عدد بلند، یا عدد منفی) از یک تابع باز گردانم؟ return فقط استفاده از اعداد 0 تا 255 را اجازه می‌دهد.
    85. چگونه می‌توان چند مرتبه در فایل fifo بدون باز کردن مجدد آن، نوشت؟
    86. چگونه می‌توان هنگام اجرای یک فرمان از مستعارها یا توابع صرفنظر کرد؟
    87. از چه طریقی بدون استفاده از تفکیک خروجی ‎ ls -l‎ می‌توانم مجوزها(یا سایراطلاعات) فایلی را دریافت کنم؟
    88. چطور می‌شود از فقدان هر یک از سطرهای تاریخچه اجتناب نمود؟
    89. من در حال خواندن سطر به سطر یک فایل, و اجرای ssh یا ffmpeg هستم، اما فقط سطر اول پردازش می‌شود!
    90. چگونه می‌توانم متنی را در ابتدای یک فایل درج کنم(برعکس ‎>>‎
    91. من تلاش می‌کنم تعداد سطرها و ستونهای ترمینال خود را دریافت کنم، اما متغیرهای COLUMNS و LINES همیشه تهی هستند
    92. چگونه یک اسکریپت CGI بنویسم که پارامترها را بپذیرد؟
    93. چطور می‌توانم محتویات نوار عنوان ترمینال خود را تنظیم نمایم؟
    94. می‌خواهم وقتی دیسک پُر می‌شود یک هشدار دریافت کنم(با تجزیه خروجی df ).
    95. میخواهم لیست خیلی بلند شناسه‌ها را دریافت کنم. چطور می‌توانم یک لیست بزرگ قابل توجه را پردازش نمایم؟
    96. ssh کرانه‌های کلمات مرا می‌خورد! نمی‌توانم ‎ ssh remotehost make CFLAGS="-g -O"‎ را انجام بدهم!
    97. چطور می‌توانم تعیین کنم که یک پیوند نمادین آیا منفصل (شکسته) است؟
    98. چگونه پشتیبانی محلی را به اسکریپت‌های bash اضافه می‌کنید؟
    99. چطور می‌توانم جدیدترین(یا قدیمی‌ترین) فایل یک شاخه را به دست آورم؟
    100. در bash چگونه می‌توانم رشته‌ها را دستکاری کنم؟
    101. توابع سودمند عمومی(warn و die)
    102. چگونه اختلاف بین دو تاریخ را به دست آورم؟
    103. چطور بررسی نمایم که فایل دریک ماه معین یا در یک محدوده تاریخی ویرایش شده است؟
    104. چرا ‎ foo=bar echo "$foo"‎ رشته bar را چاپ نمی‌کند؟
    105. چرا ‎ set -e‎(یا ‎ set -o errexit‎ یا‎ trap ERR‎) آنچه را انتظار دارم انجام نمی‌دهد؟
    106. می‌خواهم از داخل اسکریپت stdout را به یک فایل ثبت وقایع tee نمایم. و شاید stderr را به همچنین.
    107. چگونه به هر سطر یک جریان مُهرتاریخ بزنم؟
    108. چطور در انتظار انجام چند پردازش فرزند بمانم؟
    109. چگونه می‌توانم بگویم که اسکریپت من آیا منبع شده(به طور نقطه‌ای) یا اجرا گردیده است؟
    110. آیا می‌توانم چیزی مشابه قالب‌ها(templates) را با bash به کار ببرم؟