انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: shell script  (دفعات بازدید: 17117 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین arman_o71

  • Full Member
  • *
  • ارسال: 183
  • جنسیت : پسر
پاسخ به: shell script
« پاسخ #15 : 26 تیر 1386، 04:17 ب‌ظ »

ولی کاملا چرک نویسه!

پ.ن. بابا پدرم در اومد چیکارش کنم که از چپ به راست بنویسه ???

sorena زحمتش رو کشید  ;)
دستشون درد نکنه
ولی من تغییر خاصی ندیدم! (به جز فهرست)

خودم یه کم دیگه بهترش کردم

کسی نیست به ما بگه چه جوری از چپ به راست بنویسیم (شده برعکس همیشه)
« آخرین ویرایش: 26 تیر 1386، 04:30 ب‌ظ توسط arman_o71 »
One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs.

    Robert Firth

آفلاین مهدی پیشگوی

  • High Hero Member
  • *
  • ارسال: 3100
  • جنسیت : پسر
  • لينوكس يعني آزادي ، امنيت
پاسخ به: shell script
« پاسخ #16 : 26 تیر 1386، 08:37 ب‌ظ »
مقالتون عالی هستش دستتون درد نکنه ;)

آفلاین Mehdi

  • ناظر ویژه انجمن
  • *
  • ارسال: 3284
  • جنسیت : پسر
    • هزاردستان
پاسخ به: shell script
« پاسخ #17 : 26 تیر 1386، 10:23 ب‌ظ »
برای چپ به راست نویسی میتونید از ماکروی [[en]] استفاده کنید و بعد دوباره برای ادامه به فارسی [[fa]] رو استفاده کنید...
مثل:
[[en]]

"Those who would give up Essential Liberty to purchase a little Temporary Safety deserve neither Liberty nor Safety"

http://en.wikipedia.org/wiki/Those_who_would_give_up_Essential_Liberty
[[fa]]
Of one Essence is the human race,
Thusly has Creation put the Base;
One Limb impacted is sufficient,
For all Others to feel the Mace.
~Saadi (persian poet) -1258
Hezardastan | Free As in Freedom

آفلاین arman_o71

  • Full Member
  • *
  • ارسال: 183
  • جنسیت : پسر
پاسخ به: shell script
« پاسخ #18 : 27 تیر 1386، 10:17 ق‌ظ »
با این درست نشد!
قبلا امتحان کرده بودم مثلا قسمت Redirecting رو نگاه کنید من برای اولیش این ماکرو رو نوشتم ولی باز هم مثل بعدی‌ها شده
One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs.

    Robert Firth

آفلاین سعید زبردست

  • سعید زبردست
  • گروه راهبران
  • *
  • ارسال: 1052
  • جنسیت : پسر
  • سعید زبردست
    • وبلاگ سعید زبردست
پاسخ به: shell script
« پاسخ #19 : 27 تیر 1386، 11:55 ق‌ظ »
با این درست نشد!
قبلا امتحان کرده بودم مثلا قسمت Redirecting رو نگاه کنید من برای اولیش این ماکرو رو نوشتم ولی باز هم مثل بعدی‌ها شده

من قسمت Redirecting رو درست کردم. فقط یه مشکلی داره. وقتی چپ به راست می کنمش میره میفته سمت چپ! مجبور شدم زیرشون خط بکشم که دیدنشون راحت بشه  ;D

فقط یه سوال. چرا اینا رو به صورت کد ننوشتی؟ منظورم داخل }}}{{{ ؟
وب سایت - وبلاگ - «آنان که می توانند انجام می دهند و آنان که نمی توانند، انتقاد می کنند ...»
قوانین و خط مشی رفتاری در انجمنهای اوبونتو ایران

آفلاین arman_o71

  • Full Member
  • *
  • ارسال: 183
  • جنسیت : پسر
پاسخ به: shell script
« پاسخ #20 : 27 تیر 1386، 04:40 ب‌ظ »
با این درست نشد!
قبلا امتحان کرده بودم مثلا قسمت Redirecting رو نگاه کنید من برای اولیش این ماکرو رو نوشتم ولی باز هم مثل بعدی‌ها شده

من قسمت Redirecting رو درست کردم. فقط یه مشکلی داره. وقتی چپ به راست می کنمش میره میفته سمت چپ! مجبور شدم زیرشون خط بکشم که دیدنشون راحت بشه  ;D

فقط یه سوال. چرا اینا رو به صورت کد ننوشتی؟ منظورم داخل }}}{{{ ؟
مشکل مال من چی بود؟
براکت ها رو اشتباه زده بودم؟

کد ننوشتم چون کد نبودن :D
می‌خواستم حالت آیتمی داشته باشن نه مثل کد
One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs.

    Robert Firth

آفلاین arman_o71

  • Full Member
  • *
  • ارسال: 183
  • جنسیت : پسر
پاسخ به: shell script
« پاسخ #21 : 27 تیر 1386، 04:44 ب‌ظ »
expr
نمی‌خواستم اینجا توضیح برنامه بنویسم ولی چون این برنامه‌ی معروفی می‌گم:
expr برنامه‌ای هست که جواب یک عبارت رو حساب می‌کنه
کارهایی که می‌کنه مختلفه مثل and و or و بزرگ‌تر و کوچک‌تری و substring و regexp matching و ...
ولی چیزی که همه جا نوشته می‌شه! arithmetic operations (من که مترجم نیستم! عملیات حسابی) هست
arman:~$ expr 4 + 6
10
arman:~$ expr 3 / 2
1
arman:~$ expr 9 - 5
4
arman:~$ expr 8 \* 3
24
همون‌طور که دیدن دو تا نکته هست:
* باید بین عملگر و عملوند فاصله باشه
* عملگر ضرب باید escape بشه که با * All Files قاطی نشه

عملیات حسابی

برای حساب کردن یک عبارت حسابی به جاری استفاده از expr بهتره که از خود shell استفاده کنیم. برای این کار عبارت را به صورت ((exp))$ می‌نویسیم:

arman:~$ echo $((2+5*3-10/2))
12
arman:~$ echo $((2#100))
4
دستور دوم تبدیل مبنا هستش
از expr بهتره مگه نه؟ ولی نمی‌دونم چرا ناشناس باقی مونده

Command Substitution (واقعا منو از ترجمه‌ي این معاف کنید!)

بعضی وقت‌ها می‌خوایم مقدار متغییرها رو برابر خروجی یک برنامه قرار بدیم مثلا می‌خوایم اسم فایل‌های یک دایرکتوری رو توی یک متغییر بریزیم اون وقت باید دستور رو در ()$ قرار بدیم
راه دیگه که معمول‌تر هم هست قرار دادن دستور بین دو تا ` است (backquoting)
arman:~$ a=$(ls /) or a=`ls /`
arman:~$ echo $a
bin boot cdrom dev etc home initrd initrd.img lib lost+found media mnt opt proc root sbin srv sys tmp usr var vmlinuz

بسط پارامترها (Parameter Expansion)

وقتی می‌خواهیم مقدار یک پارامتر (متغییر)‌ رو بدونیم باید بصورت
${parameter}بنویسیم البته {} اختیاری هستند به جز وقتی که پارامترهای عددی بیشتر از یک رقمی داریم یا در بعد از پارامتر کاراکتری وجود دارد که ممکن است جز نام پارامترمحسوب شود

خوب این‌ها رو که بلد بودیم قسمت مهم اعمال بعضی تغییرها روی متغییرها هست

${parameter:-default}
مقدار parameter را برمی‌گرداند اگر parameter مقدار دهی نشده باشد یا null (خالی) باشد مقدار default را برمی‌گرداند

arman:~$ a=Value
arman:~$ echo ${a:-PARAMETER IS NOT SET}
Value
arman:~$ echo ${b:-PARAMETER IS NOT SET}
PARAMETER IS NOT SET

${parameter:=default}
مانند بالا ولی مقدار default به parameter اختصاص داده می‌شود

${parameter:?[message]}
* منظور از براکت‌ها این است که قسمت message اختیاری است
مقدار parameter را برمی‌گرداند اگر parameter مقدار دهی نشده باشد یا null باشد، یک خطا اتفاق می‌افتد که message هم به عنوان پیام خطا نمایش داده می‌شود و با مقدار خروجی غیر صفر خواهد بود

arman:~$ echo ${test:?}
bash: test: parameter null or not set
arman:~$ echo ${test:?Please set test variable}
bash: test: Please set test variable
arman:~$ test='new value'
arman:~$ echo ${test:?Please set test variable}
new value

${parameter:+val}
اگر parameter مقدار دهی نشده یا null باشد مقدار val را برمی‌گرداند در غیر این‌صورت همان null را برمی‌گرداند

در تمام مثال های بالا که از : در آن‌ها استفاده شده می‌توانیم : را پاک کنیم در این‌صورت فقط مقدار دهی شدن مورد بررسی قرار داده می‌شود و null بودن تاثیری ندارد

arman:~$ test=
arman:~$ echo ${test:-is null or not set}
is null or not set
arman:~$ echo ${test-is not set}

arman:~$ unset test
arman:~$ echo ${test:-is null or not set}
is null or not set
arman:~$ echo ${test-is not set}
is not set

${#parameter}
طول رشته‌ی parameter را بر می‌گرداند

${parameter#pattern}
کوچک‌ترین رشته‌ای که با الگوی pattern سازگارست از اول parameter پاک می‌کند

${parameter##pattern}
بزرگترین رشته‌ای که با الگوی pattern سازگارست از اول parameter پاک می‌کند

${parameter%pattern}
کوچک‌ترین رشته‌ای که با الگوی pattern سازگارست از آخر parameter پاک می‌کند

${parameter%%pattern}
بزرگترین رشته‌ای که با الگوی pattern سازگارست از آخر parameter پاک می‌کند

arman:~$ a=000100
arman:~$ echo ${a#+(0)}
00100
arman:~$ echo ${a##+(0)}
100
arman:~$ echo ${a%+(0)}
00010
arman:~$ echo ${a%%+(0)}
0001
arman:~$ a=100
arman:~$ echo ${a##+(0)}
100
One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs.

    Robert Firth

آفلاین سعید زبردست

  • سعید زبردست
  • گروه راهبران
  • *
  • ارسال: 1052
  • جنسیت : پسر
  • سعید زبردست
    • وبلاگ سعید زبردست
پاسخ به: shell script
« پاسخ #22 : 27 تیر 1386، 04:47 ب‌ظ »
با این درست نشد!
قبلا امتحان کرده بودم مثلا قسمت Redirecting رو نگاه کنید من برای اولیش این ماکرو رو نوشتم ولی باز هم مثل بعدی‌ها شده

من قسمت Redirecting رو درست کردم. فقط یه مشکلی داره. وقتی چپ به راست می کنمش میره میفته سمت چپ! مجبور شدم زیرشون خط بکشم که دیدنشون راحت بشه  ;D

فقط یه سوال. چرا اینا رو به صورت کد ننوشتی؟ منظورم داخل }}}{{{ ؟
مشکل مال من چی بود؟
براکت ها رو اشتباه زده بودم؟

کد ننوشتم چون کد نبودن :D
می‌خواستم حالت آیتمی داشته باشن نه مثل کد

قبل و بعد از [[en]] و [[fa]] یه خط خالی رد کن  ;)
وب سایت - وبلاگ - «آنان که می توانند انجام می دهند و آنان که نمی توانند، انتقاد می کنند ...»
قوانین و خط مشی رفتاری در انجمنهای اوبونتو ایران

آفلاین arman_o71

  • Full Member
  • *
  • ارسال: 183
  • جنسیت : پسر
پاسخ به: shell script
« پاسخ #23 : 29 تیر 1386، 02:43 ب‌ظ »

ادامه Parameter Expansion

این قسمت از Parameter Expansion مخصوص Bash هست و توی sh کار نمی‌کنه برای همین خط اول  script رو از sh باید به bash تغییر بدین

${parameter:offset[:length]}از رشته‌ی parameter یک زیر رشته از offset به طول length جدا می‌کند اگر length را وارد نکنید تا آخر رشته پیش می‌رود

arman:~$ str="This is a sample string"
arman:~$ echo ${str:2+2}
is a sample string
arman:~$ echo ${str:0:3*3}
This is a

${!parameter}به جای مقدار paramaeter مقدار متغییری که نامش برابر مقدار parameter هست را برمی‌گرداند
arman:~$ fa="Salam"
arman:~$ en="Hello"
arman:~$ greet=en
arman:~$ echo ${!greet}
Hello
arman:~$ greet=fa
arman:~$ echo ${!greet}
Salam

${!param*}
${!param@}
نام تمام متغییرهایی که با param شروع می‌شوند را برمی‌گرداند و با اولین کاراکتر IFS جداسازی می‌کند
arman:~$ a=value
arman:~$ ab=value
arman:~$ afhjd='value is not important'
arman:~$ ah=
arman:~$ echo ${!a*}
a ab afhjd ah

${!parameter[*]}
${!parameter[@]}

* براکت‌ها اختیاری نیستند.
اگر parameter آرایه باشد اندیس‌های آرایه را برمی‌گرداند و اگر متغییر معمولی باشد 0 و اگر تعریف نشده باشد null برمی‌گرداند
arman:~$ arr=(9 8 7)
arman:~$ echo ${!arr[*]}
0 1 2
arman:~$ a='normal'
arman:~$ echo ${!a[*]}
0
arman:~$ echo ${!b[*]}


${parameter/pattern/replace}
اولین زیر رشته‌ای از parameter که با الگوی pattern مطابقت کند را با replace جایگزین می‌کند

${parameter//pattern/replace}تمام قسمت‌هایی از parameter که با الگوی pattern مطابقت کند را با  replcae جایگزین می‌کند

${parameter/#pattern/replace}اگر ابتدای parameter با pattern مطابقت کند آن قسمت با replace عوض می‌شود

${parameter/%pattern/replace}اگر انتهای parameter با pattern مطابقت کند آن قسمت با replace عوض می‌شود

arman:~$ a=salambehame
arman:~$ echo ${a/a/b}
sblambehame
arman:~$ echo ${a//a/b}
sblbmbehbme
arman:~$ echo ${a/#salam/hello}
hellobehame
arman:~$ echo ${a/%salam/hello}
salambehame
arman:~$ echo ${a/%be/hello}
salambehame
arman:~$ echo ${a/%hame/hello}
salambehello
One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs.

    Robert Firth

آفلاین Mehdi

  • ناظر ویژه انجمن
  • *
  • ارسال: 3284
  • جنسیت : پسر
    • هزاردستان
پاسخ به: shell script
« پاسخ #24 : 03 امرداد 1386، 11:11 ب‌ظ »
من یه تغییر تو css ویکی دادم! از این به بعد برای نوشتن کدها فقط کافیه از {{{ و }}} استفاده کنید و برای اینکه کدها چپ به راست بشه نیازی به استفاده از [[en]] نیست. یعنی کدها به صورت اتوماتیک چپ به راست نوشته میشن!
Of one Essence is the human race,
Thusly has Creation put the Base;
One Limb impacted is sufficient,
For all Others to feel the Mace.
~Saadi (persian poet) -1258
Hezardastan | Free As in Freedom

آفلاین arman_o71

  • Full Member
  • *
  • ارسال: 183
  • جنسیت : پسر
پاسخ به: shell script
« پاسخ #25 : 04 امرداد 1386، 12:38 ب‌ظ »
دستت درد نکنه خیلی بهتر شد
البته من همیشه با sed نوشته‌هام رو به wiki تغییر می‌دادم  :)
One of the main causes of the fall of the Roman Empire was that, lacking zero, they had no way to indicate successful termination of their C programs.

    Robert Firth