basename - از این دستور برای بازگشت نام خالص یک مسیر استفاده میشود.
شکل کلی دستور:
$ basename [string] [suffix]
یکی دیگر از دستوراتی که در اسکریپت نویسی از آن استفاده خواهید کرد این دستور است.این دستور برای پردازش مسیرها، نام خالص را بعد از آخرین ممیز به شرط وجود یک رشته بر میگرداند . برای این که متوجه منظور شوید به نمونه جدول زیر دقت کنید :
خروجی دستور basename | نام مسیر | مسیر | شماره |
"lib" | "/usr" | "/usr/lib" | 1 |
"usr" | "/" | "/usr/" | 2 |
"usr" | "." | "usr" | 3 |
"/" | "/" | "/" | 4 |
"." | "." | "." | 5 |
".." | "." | ".." | 6 |
در شماره یک اگر در جلوی basename مسیر مشخص شده را وارد کنید، رشته ی بعد از آخرین ممیز را در خروجی نشان خواهد داد. در دستور دوم، همینطور که در ابتدا گفته شد، بعد از آخرین ممیز به شرط وجود رشته، رشته را چاپ خواهد کرد از آنجایی که بعد از آخرین ممیز هیچ رشتهای وجود ندارد آخرین ممیز را در نظر نخواهد گرفت و بجای آن یکی مانده به آخرین ممیز را به عنوان ممیز آخر پردازش میکند و رشتهیبعد از آن یعنی user را چاپ خواهد کرد.
نکته: سوال: اگر بعد از آخرین رشته متنی را خودمان وارد کنیم چه میشود ؟ مثال زیر را در نظر بگیرید :
$ basename /etc/bash.bashrc bash.bashrc
$ basename /etc/bash.bashrc one bash.bashrc
همینطور که میبینید، با وارد کردن رشتهای بعد از مسیر مشخص شده، آن نادیده گرفته میشود، به مثالهای بعدی توجه کنید :
$ basename /etc/bash.bashrc c bash.bashr
$ basename /etc/bash.bashrc rc bash.bash
$ basename /etc/bash.bashrc hrc bash.bas
$ basename /etc/bash.bashrc bashrc bash.
$ basename /etc/bash.bashrc .bashrc bash
اگر بعد از آخرین رشته، رشته ای هم نام با رشتهی قبلی وارد کنید به همان اندازه از رشتهی اصلی کم خواهد شد و در خروجی آنچه که باقی میماند چاپ خواهد شد.
این دستور فقط برای مسیرها استفاده نمیشود و در خیلی موارد دیگر کاربرد دارد :
$ basename http://30li.ir/bash/commands/basename basename
$ basename Emamian basename Emamian
گفته شد در اسکریپت نویسی هم این دستور کاربر دارد، من نمیخواهم شما را درگیر اسکریپت نویسی کنم و فقط با ذکر یک مثال توضیح مختصری میدهم :
$ AddressFile=/home/name/Desktop/test $ cat $AddressFile /home/one /home/two /home/three /home/four /home/five $ cat $AddressFile | while read LINE > do > count=$(( $count + 1 )) > var1=$(echo "$LINE") > echo -n "$count = " > var2=$(basename $var1) > echo "$var2" > done 1 = one 2 = two 3 = three 4 = four 5 = five
من ابتدا در میزکارم یک فایل با نام test ایجاد کردم و داخل آن را محتویات فرضی در نظر گرفتم :
$ cat /home/name/Desktop/test /home/one /home/two /home/three /home/four /home/five
برای اطلاعات بیشتر به دستور cat رجوع کنید.
سپس آدرس فایل را در متغیری به نام AddressFile قرار دادم و سپس برای یکبار خروجی از محتویات آن از دستور cat استفاده کردم. سپس آن را در داخل یک حلقه قرار دادم به این صورت که خط به خط فایل را بخواند و آن را در متغیری (var1) قرار دهد، سپس این متغیر را برای دستوری basename در نظرگرفتم تا فقط رشتههای بعد از آخرین ممیز را نشان دهد، و خروجی حاصل از این دستور را در یک متغیر دیگری قرار دادم و سپس از آن متغیر خروجی گرفتم.
نکته: از متغیر count برای شمارش هر بار اجرای حلقه استفاده کردهام.
نکته: دستور echo به صورت باطنی پس از چاپ به خط بعدی میرود. برای اینکه این عمل انجام نشود از گزینهی اختیاری n
استفاده کردهام. (برای اطلاعات بیشتر به دستور echo رجوع کنید.)
این یک مثال ساده بود، شما میتوانید در جاهای مختلف استفاده کنید، مثلاً فرض کنید فایلی با بیش از 1000 آدرس اینترنتی دارید و میخواهید فقط از نام آخرین ممیز آن مطلع شوید؛ دو راه دارید : یکی اینکه دستی این کار را انجام دهید ! یا اینکه فقط از یک حلقه برای اینکار استفاده کنید. انتخاب با شما.