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

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

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

نویسنده موضوع: یک محاسبه کوچک در بش  (دفعات بازدید: 1587 بار)

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

آفلاین nomina775

  • Newbie
  • *
  • ارسال: 4
یک محاسبه کوچک در بش
« : 11 آذر 1394، 01:28 ب‌ظ »
درود
بچه ها میخواستم ببینم کسی کمک میکنه تا یک اسکریپت بنویسم تا کار زیر رو برایم انجام بده
وقتی این اسکریپت اجرا میشه میخوام که اول یه ورودی عدد صحیح بگیره.
بعد که ورودی رو گرفت اون رو به علاوه 1 کنه
بعد حاصل را تقسیم بر 2 کنه
حالا با if اگر حاصل عدد مثبت و صحیح بود اون رو چاپ کنه و بره سراغ خط بعدی اسکریپت که اونم یه چیزی شبیه به همین عملیات شرطی هست.
اگه هم اعشاری شد هیچ کاری نکنه و بره سراغ خط بعدی اسکریپت
تنها مشکلی که دارم اینه که نمیتونم به if بفهمونم که اگه عدد اعشاری بود چاپش نکند.
در ضمن نمیدونم چرا خروجیها هم همه صحیح هستند. مثلا خروجی زیر عدد صحیح هست (هر جفتش)
echo "`expr 5 / 2 `"
echo "5 / 2" | bc
ممنون

آفلاین احسان فعالپور

  • Sr. Member
  • *
  • ارسال: 408
  • جنسیت : پسر
پاسخ : یک محاسبه کوچک در بش
« پاسخ #1 : 11 آذر 1394، 02:16 ب‌ظ »
سلام. میتونی سوئیچ l- رو برای bc استفاده کنی تا نتایج دیگه integer نباشن یا از این روش استفاده کنی:
ehsan@ehsan-SVF152190X:~$ echo "scale=5; 5/2" | bc
2.50000
برای چک کردن اینکه آیا عدد اعشار داره یا نه هم مطمئن نیستم ولی شاید بتونی با sed یا حتی اپراتورهایی که برای string ها تو بش تعریف شده چک کنی ببینی توی اون متغیر . وجود داره یا نه که کار ساده ایه:
ehsan@ehsan-SVF152190X:~$ x=2.65
ehsan@ehsan-SVF152190X:~$ y=3
ehsan@ehsan-SVF152190X:~$ x_test=$(echo ${x##*\.})
ehsan@ehsan-SVF152190X:~$ echo $x_test
65
ehsan@ehsan-SVF152190X:~$ y_test=$(echo ${y##*\.})
ehsan@ehsan-SVF152190X:~$ echo $y_test
3
ehsan@ehsan-SVF152190X:~$
حالا فقط کافیه چک کنی ببینی متغیرهای تست با متغیراهای متناظرشون برابرن یا نه.
امیدوارم مطلبو گرفته باشی.
عضو ارشد فدراسیون بیکاران ایران FBI

آفلاین nomina775

  • Newbie
  • *
  • ارسال: 4
پاسخ : یک محاسبه کوچک در بش
« پاسخ #2 : 11 آذر 1394، 02:26 ب‌ظ »
ممنون احسان جان
یه سوال دیگه هم برام پیش اومد که کم و بیش و مربوط به همین موضوعی که باهاش درگیر هستم میشه.
چطور یک شرط تعریف کنم که اگه متغیرمون عدد زوج بود اجرا بشه و در طرف دیگه یک شرط دیگه تعریف کنم که در صورتی که متغیرش فرد بود دستورش رو اجرا کنه؟
if [$x = odd]
then 

elif [$x = even]
then

fi

به جای [$x = odd] و [$x = even] چی باید بنویسم؟
« آخرین ویرایش: 11 آذر 1394، 02:29 ب‌ظ توسط nomina775 »

آفلاین احسان فعالپور

  • Sr. Member
  • *
  • ارسال: 408
  • جنسیت : پسر
پاسخ : یک محاسبه کوچک در بش
« پاسخ #3 : 11 آذر 1394، 02:30 ب‌ظ »
خب این که دیگه خیلی سادس:

ehsan@ehsan-SVF152190X:~$ y=5
ehsan@ehsan-SVF152190X:~$ x=6
ehsan@ehsan-SVF152190X:~$ echo $((y%2))
1
ehsan@ehsan-SVF152190X:~$ echo $((x%2))
0
ehsan@ehsan-SVF152190X:~$

مثلا اینجوری:
ehsan@ehsan-SVF152190X:~$ x=42
ehsan@ehsan-SVF152190X:~$ if [ $(echo $((x%2))) -eq 0 ];then echo "$x is Even."; else echo " $x is Odd.";fi
42 is Even.
ehsan@ehsan-SVF152190X:~$
« آخرین ویرایش: 11 آذر 1394، 02:33 ب‌ظ توسط احسان فعالپور »
عضو ارشد فدراسیون بیکاران ایران FBI

آفلاین nomina775

  • Newbie
  • *
  • ارسال: 4
پاسخ : یک محاسبه کوچک در بش
« پاسخ #4 : 11 آذر 1394، 02:33 ب‌ظ »
خیلی لطف کردید احسان جان. =D> =D>
برم ببینم میتونم این چیزی که توی ذهنم هست رو پیاده کنم یا نه
 ):P

آفلاین nomina775

  • Newbie
  • *
  • ارسال: 4
پاسخ : یک محاسبه کوچک در بش
« پاسخ #5 : 11 آذر 1394، 04:24 ب‌ظ »
از اونجایی که مشکلم کاملا حل شد (تشکر از آقا احسان) اطلاعاتی که به دست آوردم رو اینجا میگذارم شاید به درد کسی بخورد.
اول از همه توضیح بدم که من میخواستم یک مجموعه کتابی رو مطالعه کنم. این مجموعه شامل ۶ کتاب میشد که هر کدام ۳۰ تا درس داشت.
برنامه م رو اینجور ریخته بودم که روز اول درس یک از کتاب یک رو شروع کنم و با فاصله ۹ روزه اون درس رو مرور کنم.
روزهای فرد رو برای مطالعه درس و روزهای زوج رو برای مرور در نظر گرفته بودم. اینجا بهش میگم که در چه روزی هستم و اون برام محاسبه میکنه که چی رو باید بخونم.

# !/bin/bash
FGRED=`echo "\033[31m"`
FGCYAN=`echo "\033[36m"`
BGRED=`echo "\033[41m"`
FGBLUE=`echo "\033[35m"`
NORMAL=`echo "\033[m"`
echo "Which Day are You in?"
read number
echo "I've Got It"
echo "You are on the Day N.O $number"
echo "You Should"
if [ $(($number % 2)) -eq 0 ]
then
if [ $number -gt 369 ]
then
echo -e "${FGRED}Well Done!${NORMAL}"
elif [ $number -gt 309 ]
then
e=`expr $number - 308 `
echo -e "${FGRED}Review${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Six${NORMAL}"
elif [ $number -gt 249 ]
then
e=`expr $number - 248 `
echo -e "${FGRED}Review${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Five${NORMAL}"
elif [ $number -gt 189 ]
then
e=`expr $number - 188 `
echo -e "${FGRED}Review${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Four${NORMAL}"
elif [ $number -gt 129 ]
then
e=`expr $number - 128 `
echo -e "${FGRED}Review${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Three${NORMAL}"
elif [ $number -gt 69 ]
then
e=`expr $number - 68 `
echo -e "${FGRED}Review${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Two${NORMAL}"
elif [ $number -gt 9 ]
then
e=`expr $number - 8 `
echo -e "${FGRED}Review${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}One${NORMAL}"
else
echo -e "${FGRED}Today You Have Nothing to Do! Go and Have Fun!${NORMAL}"
fi
fi
if [ $(($number % 2)) -eq 1 ]
then
if [ $number -gt 360 ]
then
echo -e "${FGRED}Well Done!${NORMAL}"
elif [ $number -gt 300 ]
then
e=`expr $number - 299 `
echo -e "${FGRED}Read${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Six${NORMAL}"
elif [ $number -gt 240 ]
then
e=`expr $number - 239 `
echo -e "${FGRED}Read${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Five${NORMAL}"
elif [ $number -gt 180 ]
then
e=`expr $number - 179 `
echo -e "${FGRED}Read${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Four${NORMAL}"
elif [ $number -gt 120 ]
then
e=`expr $number - 119 `
echo -e "${FGRED}Read${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Three${NORMAL}"
elif [ $number -gt 60 ]
then
e=`expr $number - 59 `
echo -e "${FGRED}Read${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}Two${NORMAL}"
elif [ $number -gt 0 ]
then
e=`expr $number + 1 `
echo -e "${FGRED}Read${NORMAL} Lesson: ${FGRED}`expr $e / 2`${NORMAL} From Book ${FGRED}One${NORMAL}"
else
echo -e "${FGRED}Today You Have Nothing to Do! Go and Have Fun!${NORMAL}"
fi
fi
exit 0
یه نکته ای هم اینجا هست. از آنجایی که بین خوندن و مرور درس ۹ روز باید فاصله میبود در نتیجه روزهای زوج اولیه رو بیکار هستم و اسکریپت هم همین رو بر میگردونه.

در ضمن میدونم اصلا تیکه کد قشنگی نیست ولی خب از کسی که تا حالا کد نزده انتظار بیشتری هم نمیره  ;D
و میدونم که راههای راحتتری بدون دخالت اسکریپت برای این کار وجود داره ولی خب هرکی یه جوری میپسنده دیگه  :P
« آخرین ویرایش: 11 آذر 1394، 04:59 ب‌ظ توسط nomina775 »