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

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

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


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

نویسنده موضوع: درخواست راهنمایی واسه نوشتن یه اسکریپت  (دفعات بازدید: 6284 بار)

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

آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
من دارم یه اسکریپت مینویسم ولی به یه جایی رسیدم که بدجوری اعصابم رو به هم ریخته

یکی از دستورات یه چیزی تو مایه های sudo grub هستش که بعد از این دستور محیط ترمینال کاملا عوض میشه از اینجا به بعد چی کار کنم

اگه دستور بعدی رو بصورت عادی وارد کنم جواب نمیده فکر کنم احتیاج به یه فرمان خاصی داره

میدونم منظورمو متوجه نشدید  :)

آقا اینجوری بگم چجور میتونم تو اسکریپت جوری دستورات رو بنویسم که توی یه محیط دیگه اجرا بشه ؟

مثلا توی محیط گراب

« آخرین ویرایش: 19 بهمن 1387، 02:38 ب‌ظ توسط moslem.b »
(\__/)
(='.'=)
(")_(")

آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
بابا یکی راهنمایی کنه خو  ](*,)
(\__/)
(='.'=)
(")_(")

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
تنها چیزی که به فکرم میرسه استفاده از سوئیچ batch--  که البته تابه حال استفاده نکردم و آوردن پارامترها دقیقا بعد از دستور grub ، این لینک هم هست ولی ظاهرا مشکل حل نشده :
http://www.technologyquestions.com/technology/linux/166941-grub-bash-script.html

چرا  فایل menu.lst  رو ویرایش نمیکنی؟

آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
چرا  فایل menu.lst  رو ویرایش نمیکنی؟

اینجوری دیگه اسکریپت نمیشه  :(
(\__/)
(='.'=)
(")_(")

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
چرا نشه؟! توی اسکریپت این  کارو بکن.

آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
مثلا" این دستور find /boot/grub/stage1 رو چجوری انجام بدم ؟
(\__/)
(='.'=)
(")_(")

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
کاربرد حالت batch-- یه چیزی مثل اینه :

#!/bin/bash
grub --batch  <<EOF
find /boot/grub/stage1
quit
EOF   

با sudo باید اجراش کنی.
راهنما :
http://jbakshi.50webs.com/Linux_tutorial/GRUB/GNU%20GRUB%20simplified.html

یکم روش کار کنی به نتیجه میرسی.

آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
کاربرد حالت batch-- یه چیزی مثل اینه :

#!/bin/bash
grub --batch  <<EOF
find /boot/grub/stage1
quit
EOF  

با sudo باید اجراش کنی.
راهنما :
http://jbakshi.50webs.com/Linux_tutorial/GRUB/GNU%20GRUB%20simplified.html

یکم روش کار کنی به نتیجه میرسی.


بهنام جان این دستور کار نکرد ولی با یکمی تغییرات درست  شد دست گلت درد نکنه
(\__/)
(='.'=)
(")_(")

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
این رو باید توی یه فایل بنویسی و به عنوان یک اسکریپت با sudo  اجرا کنی در نهایت میتونی خروجی رو فیلتر کنی تا دقیقا (hdx,x) رو بهت بده ...
حالا چیکار کردی بگو ما هم یاد بگیریم.


ویرایش :
خروجی برای من اینطوریه :

 behnam@ubuntu:~/Desktop$ sudo ./55
Probing devices to guess BIOS drives. This may take a long time.

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub> find /boot/grub/stage1
 (hd0,4)
grub> quit
behnam@ubuntu:~/Desktop$

محتویات فایل 55 هم همون دستورات بالاست.
« آخرین ویرایش: 20 بهمن 1387، 08:13 ق‌ظ توسط Behnam Golds »

آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
اونو میدونم که باید بهش حالت اجرایی بدم ولی خود دستورات رو یکم تغییر دادم درست شد و خروجی (hdx,x) رو بهم داد

نقل‌قول
#!/bin/bash
sudo grub --batch  <<EOF
find /boot/grub/stage1
quit 
EOF

اینم از خروجی

نقل‌قول
mse@mse-desktop:~/Desktop$ ./test.sh
Probing devices to guess BIOS drives. This may take a long time.

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub> find /boot/grub/stage1
 (hd0,8)
grub> quit

خوب یه فکر دیگه زد به سرم من اسکریپت رو واسه یه چیز دیگه میخواستم ولی با دو تا دستور دیگه میشه تعمیر گراب رو به عهده ی یه اسکریپت سپرد :D

خوب بهنام جان ما دو تا دستور دیگه نیاز داریم

اولین دستور باید مقدار خروجی رو قبلش یه root اضافه کنه و انجامش بده  (root (hdx,y





« آخرین ویرایش: 20 بهمن 1387، 08:32 ق‌ظ توسط moslem.b »
(\__/)
(='.'=)
(")_(")

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: درخواست راهنمایی واسه نوشتن یه اسک&
« پاسخ #10 : 20 بهمن 1387، 09:40 ق‌ظ »
خوب میتونیم از خروجی قبلی (hdx,y)  رو با دستور grep  جدا کنیم و توی یه متغیر مثلا به اسم sysdev  ذخیره کنیم  و بعد این متغیر رو توی یه بلوک جدید بدیم به root  :

#!/bin/bash
 set `{
grub --batch  <<EOF |grep  \(hd[0-9],[0-9]\)
find /boot/grub/stage1
quit
EOF
}`
sysdev=$1
echo $sysdev

تا اینجا فقط (hdx,y) رو گذاشتیم توی متغیر sysdev و بعد توی خروجی نمایش دادیم . البته این خط هم توی خروجی نمایش داده میشه ولی توی sysdev  ذخیره نمیشه اگر خط آخر یعنی echo رو حذف کنی متوجه میشی که  بازم خط زیر نمایش داده میشه که نمیدونم چطور حذفش کنم :
Probing devices to guess BIOS drives. This may take a long time.البته مهم نیست مشکلی ایجاد نمیکنه .
حالا اگر اسکریپت رو گسترش بدیم یه چیزی تو این مایه ها خواهیم داشت :

#!/bin/bash
 set `{
grub --batch  <<EOF |grep  \(hd[0-9],[0-9]\)
find /boot/grub/stage1
quit
EOF
}`
sysdev=$1

{
grub --batch  <<EOF
root $sysdev
quit
EOF
}

دیگه چیکار باید بکنیم ؟

ویرایش :
ضمنا اون sudo  رو از اسکریپت بیار بیرون اینطوری برای بلوک های بعدی هم باید sudo بذاری :
sudo ScriptName
« آخرین ویرایش: 20 بهمن 1387، 09:44 ق‌ظ توسط Behnam Golds »

آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
ایول داریم به جاهای حساس میرسیم

دستور بعدی باید از خروجی که گرفتیم (  (root (hdx,y  ‌) یه قسمتش حذف بشه و یه دستور دیگه قبلش بیاد اینجوری (setup (hdx

خوب اون sudo رو هم حذف میکنیم  :)

نقل‌قول
Probing devices to guess BIOS drives. This may take a long time.

این خط رو منم هر کاری کردم نتونستم پاکش کنم  :o
« آخرین ویرایش: 20 بهمن 1387، 10:04 ق‌ظ توسط moslem.b »
(\__/)
(='.'=)
(")_(")

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
فکر کنم این دیگه آخریش باشه البته یکم اسم متغیر هارو تغییر دادم :

#!/bin/bash
 set `{
grub --batch  <<EOF |grep  \(hd[0-9],[0-9]\)
find /boot/grub/stage1
quit
EOF
}`

syspart=$1
set `expr substr $syspart 2 3`
sysdev=$1

{
grub --batch  <<EOF
root $syspart
setup ($sysdev)
quit
EOF
}


آفلاین moslem.b

  • High Sr. Member
  • *
  • ارسال: 590
  • جنسیت : پسر
بهنام این واسه من ارور میده خروجیش واسه تو چی میشه ؟
« آخرین ویرایش: 20 بهمن 1387، 11:28 ق‌ظ توسط moslem.b »
(\__/)
(='.'=)
(")_(")

آفلاین Behnam Golds

  • High Hero Member
  • *
  • ارسال: 1368
  • جنسیت : پسر
پاسخ به: درخواست راهنمایی واسه نوشتن یه اسک&
« پاسخ #14 : 20 بهمن 1387، 11:32 ق‌ظ »
من که مشکلی ندارم :

behnam@ubuntu:~/Desktop$ sudo ./test
[sudo] password for behnam:
Probing devices to guess BIOS drives. This may take a long time.
Probing devices to guess BIOS drives. This may take a long time.

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]
grub> root (hd0,4)
grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,4)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.
grub> quit

خروجی برای تو چیه ؟


ویرایش :

چند خط به اولش اضافه کردم که بدون دسترسی root  پیغام مناسب بده و از اسکریپت خارج بشه.

#!/bin/bash
set `whoami`

if [ "$1" != "root" ];
then
echo "Permission denied: You must be root"
exit
fi


 set `{
grub --batch  <<EOF |grep  \(hd[0-9],[0-9]\)
find /boot/grub/stage1
quit
EOF
}`

syspart=$1
set `expr substr $syspart 2 3`
sysdev=$1

{
grub --batch  <<EOF
root $syspart
setup ($sysdev)
quit
EOF
}

exit
« آخرین ویرایش: 20 بهمن 1387، 11:51 ق‌ظ توسط Behnam Golds »