نحوه استفاده از توابع در Bash با استفاده از این زبان رایانه ای سازگار با POSIX مبتنی بر پوسته یونیکس. به عنوان یک زبان ، عملکرد آن متشکل از تفسیر دستورات لینوکس است ، به ما امکان می دهد فرآیندهای تکراری خود را به صورت خودکار انجام دهیم و همچنین از دستورات سیستم عامل دستوراتی ایجاد کنیم. در این مقاله بررسی خواهیم کرد نحوه استفاده از توابع در bash. توصیه می کنم مقاله چگونه بخوانید اسکریپت های خود را با استفاده از bash ایجاد کنید.
در اسکریپتی که پیشنهاد می کنیم ، با دانستن نام آن ، از زبان Bash برای جستجوی یک فایل استفاده می کنیم. برای این کار ما از پیدا کردن دستور اما با کمک توابع قبلاً در اسکریپت مذکور تعریف شده است. شما باید یک ویژگی یا محدودیت Bash را در نظر بگیرید که در همه زبانها وجود ندارد: برای فراخوانی یک تابع باید تعریف شود قبلا.
توابع را تعریف کنید
برای تعریف توابع دو راه وجود دارد: با یا بدون اعلان عملکرد:
function nombre_funcion () { # codigo }
یا این یکی دیگر ، همان است که من استفاده می کنم همانطور که بعدا خواهید دید.
nombre_funcion () { # codigo }
همچنین Bash همچنین روشی را برای عبور پارامترها و بازگرداندن نتایج فراهم می کند. که در مقالات بعدی خواهیم دید.
#!/usr/bin/env bash # ~/.bin/encontrar # encuentra archivos a partir de la descripción de su nombre en un directorio específico # # Por Pedro Ruiz Hidalgo # version 1.0.0 # Copyright © enero 2017 # # EXIT_OK=0 EXIT_BAD=66 PATRON=$1 DIRECTORIO=$2 autor () { echo -e "\nPedro Ruiz Hidalgo @petrorum. Copyright © 2017\n" } ayuda () { echo -e "\nencontrar [PATRON] [DIRECTORIO]\n" } noparams () { echo -e "\nSon necesarios dos parámetros\nencontrar -h para ayuda\n" read -p "¿Quieres ver la ayuda? (S|s)" -n 1 -r if [[ $REPLY =~ ^[Ss]$ ]]; then echo "" ayuda fi } nodir () { echo -e "\nDirectorio no Existe\n" } if [[ $PATRON == "-h" ]]; then ayuda exit $EXIT_OK fi if [[ $PATRON == "-a" ]]; then autor exit $EXIT_OK fi if [ $# -lt 2 ]; then noparams else if [ -d $DIRECTORIO ]; then echo "" find $DIRECTORIO -name $PATRON* echo "" exit $? else nodir exit EXIT_BAD fi fi
تحلیل اسکریپت
تعاریف
برای bash هر فرآیند با موفقیت به پایان رسیده است باید کد "0" را به عنوان یک سیگنال داشته باشد. خطوط 12 و 13 کد خطای مورد استفاده را تعریف می کند برای موفقیت EXIT_OK y EXIT_BAD برای خروج در صورت خرابی.
در خطوط 15 و 16 ، متغیرهای PATTERN و DIRECTORY اولین ($ 1) و دوم ($ 2) پارامترها را که پس از نام اسکریپت در خط فرمان ظاهر می شوند ، اختصاص می دهیم ، همانطور که بعداً هنگام اجرای آن خواهیم دید.
در خط 18 ما اولین عملکرد خود را ایجاد می کنیم. تابعی که "نویسنده" نامیده می شود تألیف فیلمنامه هنگامی که ما آن را با استدلال "-a" صدا می کنیم همانطور که در خطوط if 50 54 XNUMX مشاهده می شود. بحث و جدل "-و" از خط 23 اجازه می دهد تا دنباله "خط بعدی" با رمزگذاری "\ n" نمایش داده شود.
تماس با noparams (خطوط 28 ~ 37) مدیریت رویدادهایی است که باید هنگام فراخوانی اسکریپت بدون هیچ پارامتری رخ دهد. ما نشان می دهیم ، به درستی بین کدهای خط جدید محصور شده است ، یک پیام نشان می دهد که اسکریپت باید با دو پارامتر اجرا شود ، سپس یک گزینه (خط 31) برای استفاده نشان داده شده است خواندن در صورت تمایل به نشان دادن کمک ، از شما می خواهد "S" یا "s" را فشار دهید. در خط 32 به معنای واقعی کلمه می گوییم: "اگر پاسخ (که در متغیر به ما می رسد) پاسخ دهید) شامل هر یک از نویسه های بزرگ یا کوچک است ، سپس (خط 33) یک خط خالی (خط 34) را نشان می دهد و عملکرد راهنما را اجرا می کند (خطوط 23 ~ 26).
تابع nodir (خطوط 39 ~ 42) زمانی اجرا می شود که تشخیص دهیم فهرست راهنمای جستجو وجود ندارد.
کارکرد
با این ما قبلاً داریم تمام توابع لازم را تعریف کرده است برای اجرای برنامه ما ، که در واقع از خط 44 شروع می شود ، بررسی اینکه اولین پارامترهایی که اسکریپت دریافت می کند "-h" است ، اگر درست است ، تابع help را اجرا می کنیم و وجود دارد که نشان دهنده خاتمه طبیعی است.
اگر PATTERN (اولین پارامتر که در سطر 15 شرح داده شده است) "-a" باشد ، نویسنده با همان مکانیزم توضیح داده شده در پاراگراف قبلی برای گزینه "-h" نمایش داده می شود.
روی خط 56 کنترل می شود که کمتر از دو پارامتر دریافت نکرده ایمدر این حالت ، تابع noparams اجرا می شود ، سپس در اگر از خط 60 بفهمیم اگر پوشه ای که می خواهیم در آن جستجو کنیم وجود دارد، اگر وجود داشته باشد یک خط خالی نشان داده می شود ، پیدا کردن دستور با آدرس دایرکتوری که می خواهیم جستجو را روی آن انجام دهیم و به دنبال آن الگوی (ابتدای نام پرونده ای که به دنبال آن هستیم) یک خط خالی جدید و با استفاده از از $ خارج می شوید؟ ما خروجی اسکریپت خود را به نتیجه تولید شده توسط find واگذار می کنیم. در صورت شرایط وجود دایرکتوری نادرست است (خط 67) ما به تابع nodir فراخوانی می کنیم و ما با خاتمه غیر عادی خارج می شویم.
اعدام و آزمایش
$ encontrar $ encontrar -a $ encontrar -h $ encontrar index aljflaskjf #directorio no existe $ encontrar index public_html $
En مقالات زیر در مورد باش ما مکانیزم های از پارامترها در توابع استفاده کنیدما همچنین خواهیم دید که چگونه بیان داده های بازگشتی از آنها
امیدوارم و امیدوارم که این پست برای شما مفید واقع شده باشد.
نظر بدهید ، نظر خود را بگذارید
خوش آمدید،
بسیار جالب و بسیار واضح.
فقط یک نکته؛ یک دلار در خط 68 در مقابل متغیر EXIT_BAD وجود ندارد.
من با مقالات شما مطمئناً یاد می گیرم.