انجمن کاربران لینوکس ایران - تکنوتاکس سابق

نسخه ي کامل: مشکل در نوشتن کد 4 عمل اصلی
شما در حال مشاهده نسخه ي متني اين صفحه هستيد. مشاهده نسخه کامل تر با قالب بندي صحيح
با سلام خدمت دوستان.
من 4 عمل جمع و تفریق و ضرب و تقسیم رو نوشتم اما وقتی ضرب رو می خوام تست کنم جواب نمیده. توی اجرا عمل ضرب رو توی تک کوتیشن میذارم اما فرقی نمیکنه. برای اجرای جمع : ./calc 2 + 3 جواب میده اما ضرب ./calc 3 ‘*’ 5 اینو جواب نمیده.
این کد رو اشتباه نوشتم.؟یا؟

[[code
#!/bin/bash
If [ $# != 3 ]
Then
Echo missing data
Exit
Fi

echo $1
echo $2
echo $3

#plus operation
If [ $2 = + ]
Then
Expr $1 + $2
Exit
Fi

#minus operation

If [ $2 = - ]
Then
Expr $1 - $2
Exit
Fi

#multiply operation

If [ $2 = * ]
Then
Expr $1 ‘*’ $2
Exit
Fi

#division operation

If [ $2 = / ]
Then
Expr $1 / $2
Exit
Fi
[code\]
کد :
#!/bin/bash
if [ $# != 3 ]
then
echo missing data
exit
fi

echo $1
echo "$2"
echo $3

#plus operation
if [ "$2" = + ]
then
expr $1 + $3
exit
fi

#minus operation

if [ "$2" = - ]
then
expr $1 - $3
exit
fi

#multiply operation

if [ "$2" = "*" ]
then
expr $1 \* $3
exit
fi

#division operation

if [ "$2" = / ]
then
expr $1 / $3
exit
fi
در هیچ جای برنامه نباید $2 را تنها بگذارید به این دلیل در صورت درخواست عمل ضرب عملگر * در تمام نقاط برنامه expand میشود به نام فایل های دایرکتوری از جمله خطی که echo در آن است و تمام if ها و ... . کل برنامه به هم میریزد...

در هنگام اجرای برنامه برای انجام عمل ضرب هم از * تنها به هیچ وجه استفاده نکنید...

الان برنامه اجرا می شود:
کد :
[fedoraman@mydesktop ~]$ ./aa 2 + 3
2
+
3
5
[fedoraman@mydesktop ~]$ ./aa 2 - 3
2
-
3
-1
[fedoraman@mydesktop ~]$ ./aa 2 '*' 3
2
*
3
6
[fedoraman@mydesktop ~]$ ./aa 2 \* 3
2
*
3
6
[fedoraman@mydesktop ~]$ ./aa 10 / 5
10
/
5
2
[fedoraman@mydesktop ~]$
ممنون عملگر ضربم درست شد. اما نمیدونم چرا وقتی عمل ضرب رو انجام میده هرچی دایرکتوری قبلا ساختم هم اسامیشو نمایش میده؟؟!
توی خطای اول $2 رو بدون دبل کئتیشن گذاشته بودم. بخاطر اون بود همونطور که گفتید. بینهایت تشکر
خواهش میکنم. فقط آقا یک خطای مهم در برنامه شما دیدم که یادم رفت بگم: دقت کنید ' با ` فرق میکند. اولی SINGLE QUOTE نام دارم و دومی BACK QUOTE... دومی باعث میشود که هرچیز که داخلش است اجرا شود و خروجی آن جای خودش قرار بگیرد. مثلا:

کد :
MYDATE_CORRECTFORM=`date`
MYDATE_INCORRECTFORM='date'

این هم خیلی مهم است... موفق باشید
bsdlinux نویسنده :خواهش میکنم. فقط آقا یک خطای مهم در برنامه شما دیدم که یادم رفت بگم: دقت کنید ' با ` فرق میکند. اولی SINGLE QUOTE نام دارم و دومی BACK QUOTE... دومی باعث میشود که هرچیز که داخلش است اجرا شود و خروجی آن جای خودش قرار بگیرد.

:lol: بله مرسی متوجه شدم