برگه‌های مرجع

پیوست ‎B‎. برگه‌های مرجع

برگه‌های مرجع زیر یک خلاصه مفید از برخی مفاهیم اسکریپت‌نویسی ارایه می‌کنند. آنچه قبلا در متن گفته شده، این موضوعات را به طور کامل‌تر، همراه با ارایه مثال‌های کاربردی مورد بحث قرار می‌دهد.

جدول ‎B-1‎. متغیرهای خاص پوسته

متغیر بیانگر
$0 نام فایل اسکریپت
$1 پارامتر مکانی شماره 1
$2 - $9 پارامترهای مکانی شماره 2 ‎تا ‎9‎
${10} پارامتر مکانی شماره ‎10
$# تعداد پارامترهای مکانی
"$*" تمام پارامترهای مکانی (به صورت یک کلمه واحد) *
"$@" تمام پارامترهای مکانی (به صورت رشته های جداگانه)
${#*} تعداد پارامترهای مکانی
${#@} تعداد پارامترهای مکانی
$? مقدار برگشتی
$$ ID پردازش ‎(PID)‎ اسکریپت
$- نشانوند‌های داده شده به اسکریپت (با استفاده ازset)
$_ آخرین شناسه فرمان قبلی
$! ID پردازش ‎(PID)‎ آخرین job اجرا شده در پس‌زمینه

* باید نقل‌قولی بشود، وگرنه به صورت ‎$@‎ پیش‌فرض می‌شود.


جدول ‎B-2‎. عملگرهای test: مقایسه دو دویی

عملگرمعنی-----عملگرمعنی
         
مقایسه حسابی     مقایسه رشته‌ای  
-eq مساوی با   = مساوی با
      == مساوی با
-ne غیر مساوی با   != غیر مساوی با
-lt کوچکتر از   \< کوچکتر از ‎(ASCII)‎ *
-le کوچکتر یا مساوی      
-gt بزرگتر از   \> بزرگتر از ‎(ASCII)‎ *
-ge بزرگتر یا مساوی      
      -z رشته تهی است
      -n رشته تهی نیست
         
مقایسه حسابی درون پرانتزهای دوتایی ‎(( ... ))‎      
> بزرگتر از      
>= بزرگتر یا مساوی      
< کوچکتر از      
<= کوچکتر یا مساوی      

* اگر داخل ساختار تست براکت‌های دوتایی ‎[[ ... ]]‎ باشد، آنوقت escape (\) لازم نیست.


جدول ‎B-3‎. عملگرهای test: فایل‌ها

عملگربررسی می‌کند که آیا-----عملگربررسی می‌کند که آیا
-e فایل وجود دارد   -s اندازه فایل صفر نیست
-f فایل یک فایل معمولی است      
-d فایل یک دایرکتوری است   -r فایل دارای مجوز خواندن است
-h فایل یک پیوند نمادین است   -w فایل مجوز نوشتن دارد
-L فایل یک پیوند نمادین است   -x فایل دارای مجوز اجرا هست
-b فایل یک دستگاه بلوکی است      
-c فایل یک دستگاه کاراکتری است   -g نشانوند sgid برقرار است
-p فایل یک لوله است   -u نشانوند suid برقرار است
-S فایل یک socket است   -k «بیت sticky» تنظیم است
-t فایل بهم پیوسته با یک ترمینال است      
         
-N فایل بعد از آخرین خوانده شدن ویرایش شده   F1 -nt F2 فایل ‎F1‎ جدیدتر از ‎F2‎ است *
-O شما مالک فایل هستید   F1 -ot F2 فایل ‎F1‎ قدیمی‌تر از ‎F2‎ است *
-G ‎id‎ گروه فایل و شما یکسان است   F1 -ef F2 فایل ‎F1‎ و ‎F2‎ هر دو ‎hard linkهای یک فایل هستند *
         
! NOT (وارونه کردن مفهوم تست‌های فوق)      

* عملگر باینری (به دو عملوند احتیاج دارد).


جدول ‎B-4‎. جایگزینی پارامتر و بسط

عبارتمعنی
${var} مقدار var (مانند ‎$var‎)
   
${var-$DEFAULT} اگر var برقرار نباشد، عبارت مساوی ‎$DEFAULT‎ ارزیابی گردد *
${var:-$DEFAULT} اگر var برقرار نباشد یا تهی باشد، عبارت برابر با ‎$DEFAULT‎ ارزیابی بشود*
   
${var=$DEFAULT} اگر var برقرار نباشد، عبارت به صورت ‎$DEFAULT‎ ارزیابی گردد *
${var:=$DEFAULT} اگر var برقرار نیست یا تهی است، عبارت به صورت ‎$DEFAULT‎ ارزیابی شود*
   
${var+$OTHER} اگر var برقرار است، عبارت برابر ‎$OTHER‎ ارزیابی شود، وگرنه به عنوان رشته تهی
${var:+$OTHER} اگر var برقرار است، عبارت معادل ‎$OTHER‎ ارزیابی گردد وگرنه مانند یک رشته تهی
   
${var?$ERR_MSG} اگر var برقرار نیست، ‎$ERR_MSG‎ چاپ شده و اسکریپت با یک وضعیت خروج ‎1‎ لغو گردد.*
${var:?$ERR_MSG} اگر var برقرار نیست، ‎$ERR_MSG‎ چاپ شده و اسکریپت با یک وضعیت خروج ‎1‎ لغو گردد.*
   
${!varprefix*} با تمام متغیرهای تعریف شده قبلی که با ‎varprefix‎ شروع می‌شوند منطبق می‌شود
${!varprefix@} باتمام متغیرهای قبلی تعریف شده که با ‎varprefix‎ شروع می‌گردند منطبق می‌شود

* اگر var برقرار است، عبارت به صورت ‎$var‎ ارزیابی گردد، بدون هیچ آثار جانبی.

# توجه کنید که برخی رفتارهای بالا در عملگرها از نگارش‌های قدیمی‌تر Bash تغییر کرده‌اند.


جدول ‎B-5‎. عملیات رشته‌ای

عبارتمعنی
${#string} طول ‎$string‎
   
${string:position} استخراج رشته فرعی از ‎$string‎ از محل ‎$position‎
${string:position:length} استخراج رشته فرعی به طول ‎$length‎ از ‎$string‎ از محل ‎$position‎ ‏[‏شماره گذاری از صفر است، محل اولین کاراکتر ‎0‏ است]‏‎
   
${string#substring} پاک کردن کوتاهترین انطباق ‎$substring‎ از سمت جلوی ‎$string‎
${string##substring} پاک کردن بلندترین مورد انطباق ‎$substring‎ از سمت جلوی ‎$string‎
${string%substring} پاک کردن کوتاهترین مورد انطباق ‎$substring‎ از سمت عقب ‎$string‎
${string%%substring} پاک کردن بلندترین مورد انطباق ‎$substring‎ از سمت عقب ‎$string‎
   
${string/substring/replacement} تعویض اولین مورد انطباق ‎$substring‎ با ‎$replacement‎
${string//substring/replacement} تعویض همه موارد انطباق ‎$substring‎ با ‎$replacement‎
${string/#substring/replacement} اگر ‎$substring‎ با ابتدای ‎$string‎ مطابقت کند، جایگزینی ‎$replacement‎ به جای ‎$substring‎
${string/%substring/replacement} اگر ‎$substring‎ با انتهای ‎$string‎ مطابقت کند، جایگزینی ‎$replacement‎ به جای ‎$substring‎
   
   
expr match "$string" "$substring" طول انطباق ‎$substring‎* در ابتدای ‎$string‎
expr "$string" : "$substring" طول انطباق ‎$substring‎* در ابتدای ‎$string‎
expr index "$string" "$substring" اولین موقعیت عددی در ‎$string‎ که کاراکتری از ‎$substring‎* در آنجا منطبق می‌شود، ‏[‎0‎ در صورتیکه انطباقی نباشد، شمارش موقعیت از ‎1‎ شروع می‌شود‏]
expr substr $string $position $length استخراج تعداد ‎$length‎ کاراکتر از ‎$string‎ با شروع از محل ‎$position‎ ‏[‎0‎ اگر منطبق نشود، ‎1‎ موقعیت اولین کاراکتر است ‏]‏
expr match "$string" '\($substring\)' استخراج ‎$substring‎*، از ابتدای ‎$string‎
expr "$string" : '\($substring\)' استخراج ‎$substring‎*، از ابتدای ‎$string‎
expr match "$string" '.*\($substring\)' استخراج ‎$substring‎*، از انتهای ‎$string‎
expr "$string" : '.*\($substring\)' استخراج ‎$substring‎*، از انتهای ‎$string‎

* که در آنجا ‎$substring‎ یک عبارت منظم است.


جدول ‎B-6‎. ساختارهای متفرقه

عبارتتوضیح
   
براکت‌ها  
if [ CONDITION ] ساختار تست
if [[ CONDITION ]] ساختار تست توسعه یافته
Array[1]=element1 مقدار دهی آرایه
[a-z] محدوده کاراکترهای داخل یک عبارت منظم
   
براکت‌های کمانی (ابروها)  
${variable} جایگزینی پارامتر
${!variable} ارجاع غیر مستقیم متغیر
{ command1; command2; . . . commandN; } بلوک کد
{string1,string2,string3,...} بسط ابرو
{a..z} بسط ابروی توسعه یافته
{} تعویض متن، بعد از find و xargs
   
   
پرانتزها  
( command1; command2 ) گروه فرمان اجرا شونده در یک پوسته فرعی
Array=(element1 element2 element3) مقدار دهی آرایه
result=$(COMMAND) جایگزینی فرمان، سبک جدید
>(COMMAND) جایگزینی پردازش
<(COMMAND) جایگزینی پردازش
   
پرانتزهای دوگانه  
(( var = 78 )) حساب اعداد صحیح
var=$(( 20 + 5 )) حساب صحیح، با تخصیص متغیر
(( var++ )) افزایش متغیر سبک C
(( var-- )) کاهش متغیر سبک C
(( var0 = var1<98?9:21 )) عملگر سه‌گانه سبک C
   
نقل‌قول کردن  
"$variable" نقل‌قول کردن "ضعیف"
'string' نقل‌قول کردن 'قوی'
   
نقل‌قول‌های برعکس  
result=`COMMAND` جایگزینی فرمان، سبک قدیم