مشکل در نوشتن یک شل اسکریپت
|
2009-02-12, 03:08 PM,
ارسال : #1
|
|||
|
|||
مشکل در نوشتن یک شل اسکریپت
سلام
من دارم یک برنامه ساده با شل می نویسم این برنامه یک یک برنامه ساده بانکی هستش باید این کار ها را بتونه انجام بده 1-باز کردن حساب 2- پرداخت به حساب 3- برداشت از حساب همه اطلاعات دارندگان حساب را در یک فایل ساده ذخیره میشه حالا مشکل من اینه که برای پرداخت یا برداشت از حساب نمی دونم چه جوری این کار را انجام بدم: - چه جوری بعد از پیدا کردن یک شماره حساب با دستور grep مبلغی را اضافه یا کم کنم کسی از دوستان میدونه چه جوری باید این کار را انجام بدم؟؟ درضمن اطلاعات اینجوری در فایل ذخیره شده اند: کد : شماره حساب|اسم دارنده حساب|مبلغ موجود در حساب|اطلاعات تماس |
|||
2009-02-13, 12:30 AM,
ارسال : #2
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
خب این برای چی با زبان شل هست؟ عجیب بنظر میاد.
تمرین درسیه؟!! Only God I Wish I Was Buddha کاش بودا بودم Live And Let Live زندگی کن و بگذار زندگی کنند Forgive And Be Forgiven ببخش و بخشیده شو |
|||
2009-02-13, 03:20 AM,
ارسال : #3
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
نقل قول :کسی از دوستان میدونه چه جوری باید این کار را انجام بدم؟؟فکر نمیکنم کسی براتون انجام بده... شما خودتون شروع کنید اگر به مشکلی خوردید مطمئن باشید دوستان کمک میکنن این خرابه قبرستان نه ایران ماست *** این خرابه ایران نیست٬ ایران کجاست؟ |
|||
2009-02-13, 11:13 AM,
ارسال : #4
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
وقتی با دستور grep مقدار عددی رو گرفتی با دستور let میتونی مقدارشو عوض کنی. فقط نکته اینکه مقدار عددی که از فایل دریافت شده اگه اولش صفر داشت مثل 09 باید صفر اولش رو برداری مثلا تا بشه 9 در غیر اینصورت اگه با دستور let بخوای از دستور let واسه تغییر این مقدار استفاده کنی بهت خطا میده. مثلا با دستور زیر خروجی عددی رو به یک متغیر میریزی:
کد : x=`echo 9` کد : let "x += 9" کد : let x+=9 در هر صورت من هم با جناب Folaani موافقم، اگه واقعا فقط واسه خودتونه که هیچی ولی در غیر اینصورت اگر تعداد رکوردها زیاد باشه و در تعداد زیادی فایل باید جستجو و جایگزینی بشه، در اینصورت Bash واسه اینکار مناسب نیست. وبنوشت رایانهدوست؛ جزء کوچکی از اجتماع کاربرهای گنو/لینوکس |
|||
2009-02-13, 06:38 PM,
ارسال : #5
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
نقل قول :خب این برای چی با زبان شل هست؟ عجیب بنظر میاد. آره تمرین درسیه. نقل قول :فکر نمیکنم کسی براتون انجام بده... شما خودتون شروع کنید اگر به مشکلی خوردید مطمئن باشید دوستان کمک میکنن دوست عزیز من از کسی نخواستم که برام این برنامه را بنویسه. من خودم بیشتر قسمت های این برنامه را نوشتم ولی به این مشکل برخوردم. نقل قول :وقتی با دستور grep مقدار عددی رو گرفتی با دستور let میتونی مقدارشو عوض کنی. فقط نکته اینکه مقدار عددی که از فایل دریافت شده اگه اولش صفر داشت مثل 09 باید صفر اولش رو برداری مثلا تا بشه 9 در غیر اینصورت اگه با دستور let بخوای از دستور let واسه تغییر این مقدار استفاده کنی بهت خطا میده. مثلا با دستور زیر خروجی عددی رو به یک متغیر میریزی: ممنون از جوابتون. ولی یک مشکل هستش اینکه برای جستجو در این فایل باید از شماره حساب استفاده کرد نه از مبلغ موجود چون ممکنه چنین مبلغی بیشتر از یک بار در فایل موجود باشد کد : grep "shomare hesab" esmle\file و همین طور که میدونید وقتی از دستور بالا استفاده میکنید تمام خطی که این شماره حساب درش هست نشان داده میشه مثل این: کد : 1002|reza|4000|iran حالا سوال اینه چه جوری میشه مبلغ موجود را از این خط که توسط grep پیدا شده جدا کرد بعد تغییرات را روی این مبلغ ایجاد کرد و دوباره در این خط و فایل ذخیره کرد. |
|||
2009-02-13, 08:51 PM,
ارسال : #6
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
نقل قول :آره تمرین درسیه.نه بابا! کجا؟ ما که اون قدیما درس میخوندیم خبری از اینطور چیزا نبود. یعنی میگم توی سیستم آموزشی از این درسا گذاشتن یا مسئله طور دیگری هست؟ Only God I Wish I Was Buddha کاش بودا بودم Live And Let Live زندگی کن و بگذار زندگی کنند Forgive And Be Forgiven ببخش و بخشیده شو |
|||
2009-02-14, 12:49 AM,
ارسال : #7
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
خب بعد از دستور grep که رکورد مورد نظر رو از فایل استخراج کردیم باید با دستور cut ستون (فیلد) مورد نظر از اون رکورد رو بدست بیاریم، مثلا:
کد : grep "shomare" filename | cut -d '|' -f 3 کد : x=$(grep "shomare" filename | cut -d '|' -f 3) وبنوشت رایانهدوست؛ جزء کوچکی از اجتماع کاربرهای گنو/لینوکس |
|||
2009-02-15, 01:10 PM,
ارسال : #8
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
PC2st.ir واقعا دستتون دردنکنه
من چون با sed زیاد آشنا نیستم نمی دونم دقیقا این عوض کردن جای متغییر را چطور انجام بدم(اگر راهنمایی کنید ممنون میشوم). چون اینجور که پیداست sed تمام مبلغ ها را با مبلغ جدید جایگزین میکند و این چیزی نیست که من میخوام. ولی با راهنمایی که کردید تونستم با یک راه طولانی تر این کار را بکنم. کد : echo -n "enter accno: " یک سوال دیگه sed اصل فایل را نباید تغییر بدهد؟؟ وقتی می خواهم با این دستور یک خط از فایل را پاک کنم فقط بصورت مجازی پاک میکنه و در اصل فایل تغییری نمیدهد. من هم مجور شد خروجی را به cat بدم. |
|||
2009-02-18, 12:10 AM,
ارسال : #9
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
عذر میخوام که دیر جواب میدم (باید پروژهام رو به استاد تحویل میدادم).
اصولا تا جایی که میدونم تو لینوکس نمیشه یک فایل رو هم برای ورودی هم برای خروجی استفاده کرد، مثلا دستور زیر اشتباهه: کد : cat filename > filename پس اینکه نمیشه خروجی ناشی از یک فایل ورودی رو به خود فایل ریخت، مختص به sed نیست و برای همه دستورات همینجوره. به همین خاطر خروجی دستور رو باید به یک فایل دیگهای ریخت (یا یک متغیر) و بعد از فایل جدید استفاده کرد. راستش کدهایی که نوشته بودی رو متوجه نشدم که دقیقا چیکار میکنه، من واسه جایگزینی یک مقدار توی یک فایل از دستور زیر استفاده میکنم: کد : sed "s/^old/new/" old-file > new-file البته فکر کنم دیگه نیازی به این توضیحات من نداشتی ![]() وبنوشت رایانهدوست؛ جزء کوچکی از اجتماع کاربرهای گنو/لینوکس |
|||
2009-02-18, 09:02 AM,
ارسال : #10
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
نقل قول :عذر میخوام که دیر جواب میدم (باید پروژهام رو به استاد تحویل میدادم).sed دارای آپشن -i (مخفف in-place) است که عملیات داده شده رو به طور مستقیم و یا در جا رو فایل اعمال می کنه. البته معقول تر اینه که ابتدا از صحت نتیجه مطمئن شیم، یعنی توی خروجی استاندارد یا یک فایل، خروجی sed رو ببینیم. به این آپشن میشه یک پسوند هم به عنوان آرگومان داد که از فایل قبل از اعمال تغییرات بکاپ بگیره. |
|||
2009-02-18, 03:41 PM,
ارسال : #11
|
|||
|
|||
پاسخ: مشکل در نوشتن یک شل اسکریپت
بسیار ممنون
![]() وبنوشت رایانهدوست؛ جزء کوچکی از اجتماع کاربرهای گنو/لینوکس |
|||
|