از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چگونه بررسی کنیم که آیا یک مسیر یک دایرکتوری یا چیز دیگری در اسکریپت Bash است
سرفصلهای مطلب
ما در حال تلاش برای توسعه یک اسکریپت بسیار ابتدایی اوبونتو هستیم که به ما امکان می دهد اطلاعات را ارائه دهیم، چه نام فایل یا شاید یک پوشه. چگونه می توانم بررسی کنم که پوشه ای در داخل یک اسکریپت پوسته در زیر ماشین های مجازی لینوکس یا یونیکس وجود دارد؟ یا چگونه می توانم ببینم فایلی وجود دارد؟ چگونه یک کاربر تشخیص می دهد که مسیر ذکر شده یک دایرکتوری یا یک فایل است؟ بنابراین، بیایید چند نمونه در اسکریپت Bash برای توضیح بیشتر داشته باشیم روی این مفهوم ابتدا حتما از سیستم خود وارد شوید. ما از اوبونتو 20.04 استفاده می کنیم. پس از ورود به سیستم، خود را باز کنید console برنامه برای انجام نمونه ها
مثال 01:
برای باز شدن پوسته، سعی کنید “Ctrl+Alt+T“. ایجاد یک bash فایل ابتدا با یک مثال ساده از بررسی اینکه آیا مسیر ذکر شده در a شروع می شود bash فایل یک فایل یا دایرکتوری است. برای ایجاد یک bash فایل کد، تایپ کنید “touch” را در terminal ضمن ذکر نام یک فایل با علامت “.sh” افزونه. بنابراین، ما نام فایل را “test.sh“. کلید را بزنید”وارد” به process پرس و جو
شما به راحتی می توانید تازه ایجاد شده را پیدا کنید bash فایل در فهرست اصلی برای افزودن الف bash کد را به آن، ما باید آن را در یک ویرایشگر باز کنیم. بنابراین، ما از یک داخلی استفاده کرده ایم GNU ویرایشگر اوبونتو 20.04. بنابراین، ما پرس و جوی زیر را در یک پوسته امتحان کرده و آن را در یک ویرایشگر باز کرده ایم.
فایل در یک ویرایشگر راه اندازی شده است. اسکریپت زیر را در آن بنویسید. ابتدا، را اضافه کنید bash پسوند در فایل به صورت “#!/bin/bash”. ما یک متغیر جدید “v1” را اعلام کرده ایم و یک “مسیر” یک فایل را به عنوان مقدار آن اختصاص داده ایم. از مسیر مشخص است که به برخی اشاره می کند bash فایل ها. عبارت “if” مقداردهی اولیه شده است. داخل بریس ها []، باید از پرچم “-d” استفاده کنیم که نشان دهنده دایرکتوری در قسمت شرط آن است. بررسی می کند که آیا مقدار متغیر ذکر شده یک دایرکتوری است یا چیز دیگری. اگر شرط برآورده شود، قسمت “then” را اجرا می کند و “$v1 is a directory” را نمایش می دهد. در غیر این صورت، قسمت دیگری از عبارت “if” را اجرا می کند و “$v1 is a file” را در پوسته نمایش می دهد. terminal. “fi” بیان می کند که عبارت “اگر” در اینجا به پایان رسیده است. پس از ذخیره این bash کد، ما به آن باز خواهیم گشت console از طریق “Ctrl+S” و ”Ctrl+X” به طور متوالی.
اکنون زمان اجرای آن است bash فایل “test.sh”. بنابراین، ما از آن استفاده کرده ایم bash آموزش در ما console با نام فایل برای بررسی خروجی. خروجی این دستورالعمل نشان می دهد که مسیر ذکر شده در فایل، یک فایل را مشخص می کند. از این رو می توان گفت که قسمت «دیگر» باید در زمان او اجرا شده باشد.
مثال 02:
بیایید این بار نتیجه یک دایرکتوری را ببینیم. این بار، خواهیم دید که پرچم “-d” چگونه کار می کند روی متغیری که حاوی مسیری برای دایرکتوری است. بنابراین، فایل “test.sh” را دوباره در ویرایشگر از طریق کوئری “nano” در پوسته باز کرده ایم.
پس از باز کردن آن، مقدار متغیر “v1” را به روز کرده و مسیر را به مسیر دایرکتوری تغییر داده ایم. ما فایل “file.sh” را با دایرکتوری “Pictures/” جایگزین کرده ایم. باقیمانده bash اسکریپت در سراسر فایل در یک ویرایشگر یکسان است. شما باید به سادگی و به سرعت به روز شده را ذخیره کنید bash ابتدا با استفاده از «Ctrl+S» و سپس «Ctrl+X» از ویرایشگر خارج شوید.
بنابراین، اجازه دهید فایل خود را دوباره اجرا کنیم. برای اجرا، از همان پرس و جوی بالا در مورد استفاده شده است console. این بار اجرا نشان می دهد که مسیر ذکر شده در bash اسکریپت یک دایرکتوری در فهرست اصلی اوبونتو 20.04 است.
مثال 03:
در دو مثال بالا، روش استفاده از پرچم “-d” را مشاهده کردید تا ببینید آیا متغیر مسیر ذکر شده یک دایرکتوری است یا خیر. این بار از پرچم دیگری به نام “-f” در مثال خود استفاده می کنیم و مشخص می کنیم که آیا مسیر ذکر شده یک فایل است یا نه. از سوی دیگر، ما از یک عبارت تودرتوی “if-else” در خود استفاده خواهیم کرد bash کد برای استفاده از پرچم های “-d” و “-f”. ما فایل “test.sh” را در آن باز کرده ایم GNU ویرایشگر از طریق terminal یک بار دیگر از دستور نانو استفاده کنید.
پس از باز کردن bash سند، ما در زیر نشان داده شده است bash اسکریپت درون آن اضافه شده است bash پسوند و یک متغیر v1 که حاوی یک مسیر فایل به عنوان مقدار آن است، مقداردهی اولیه کرد. بعلاوه، دستور “if-else” تودرتو به درستی برای بررسی اینکه آیا مسیر یک متغیر یک فایل یا یک دایرکتوری است استفاده شده است. بنابراین، در اولین دستور if، شرطی را برای بررسی اینکه آیا مقدار متغیر یک دایرکتوری است از طریق پرچم “-d” ذکر کرده ایم. اگر شرط برآورده شود، “$v is a directory” را چاپ می کند. در غیر این صورت قسمت دیگر یک بیانیه جمع آوری می شود. در قسمت «دیگر»، عبارت «اگر-دیگر» دیگری ذکر شده است. در قسمت “if” این عبارت، از شرط برای بررسی اینکه آیا مسیر متغیر “v” حاوی یک فایل است یا نه از طریق پرچم “-f” استفاده شده است. اگر مسیر حاوی یک فایل باشد، چاپ خواهد شد که “$v یک فایل است”; در غیر این صورت، عبارت echo قسمت “else” در قسمت کامپایل می شود terminal.
پس از ذخیره کد، این زمان برای کامپایل است bash اسکریپت از طریق a bash پرس و جو. بنابراین، ما از “bash” پرس و جو با نام فایل ذکر شده در آن. خروجی همان چیزی است که ما انتظار داشتیم. از آنجایی که مقدار متغیر حاوی مسیری است که مسیر فایل را مشخص می کند، نشان می دهد که “$v یک فایل است”.
مثال 04:
در مثال بالا، ما از مسیر یک فایل استفاده کردهایم تا ببینیم در هنگام استفاده از پرچمهای «-d» و «-f» دستور «if-else» تودرتو چگونه واکنش نشان میدهد. این بار از مسیر دایرکتوری استفاده خواهیم کرد. یک بار دیگر فایل را باز کنید و مقدار مسیر متغیر را به روز کنید. ما “test.txt” را با “Documents/” جایگزین کرده ایم. اسکریپت باقیمانده همان است.
پس از کامپایل موفقیت آمیز یک bash اسکریپت، مسیر اعلام شده در مقدار متغیر “v” یک دایرکتوری است، به عنوان مثال، دانلودها.
مثال 05:
مثال آخر و جایزه برای تمرین اضافی است. فایل جدید “file.sh” را باز کرده و آن را با کد زیر پر کنید. دو متغیر برای نمایش مسیر فایل و دایرکتوری به صورت متوالی اعلام شده است. عبارات “if-else” با پرچم “-d” برای تعیین نوع مسیر، به عنوان مثال، دایرکتوری یا فایل استفاده شده است.
هنگامی که کد کامپایل شد، متغیر اول حاوی یک فایل و متغیر دوم شامل یک دایرکتوری مطابق با خروجی زیر است.
نتیجه:
در این راهنما، ما دیدیم که چگونه می توان متوجه شد که مسیر ذکر شده یک فایل، یک دایرکتوری یا چیز دیگری است. ما از دستورات “if-else” و “if-else” تودرتو استفاده کردهایم در حالی که از پرچمهای “-d” و “-f” در مثالهای خود برای توضیح بهتر استفاده میکنیم.
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم
زمان انتشار: 1402-12-30 14:50:04