PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش کامل اسکریپت نویسی و شل نویسی اندروید



_ANONYMOUS_
02-02-2013, 21:48
سلام

عمل اسکریپت نویسی یا شل نویسی همانند برنامه نویسی است و دستور های مختلفی داره ، همچنین لذت بخش هم هست .

متاسفانه تاپیک آموزش این مطلب رو در انجمن پیدا نکردم ، در این تاپیک سعی می کنم در هر پست چند دستور رو با آموزش کامل قرار بدم

یک خواهشی از دوستان دارم ، لطفا تا پایان دستور ها از زدن پست در این تاپیک حتما خودداری کنید ! تا پست های آموزش به هم نریزه .

اگه هم خواستید تشکر کنید یا خوشتون اومد به جای زدن دکمه ی "سپاس" ، یک صلوات بفرستید .

اگه هم خواستید کپی کنید لطفا قبلش از من اجازه بگیرید

جا داره از دوستم broodplank1337 @ XDA بخاطر کمک به خودم در شروع اسکریپت نویسی تشکر کنم ، بدون اون هیچ وقت نمی تونستم اسکریپت نویسی رو ادامه بدم

با تشکر ، موفق باشید %

:cv:

_ANONYMOUS_
02-02-2013, 22:04
سلامی دوباره

اول از همه کمی مقدمه :

# اسکریپت هایی که در این تاپیک آموزش میدم پس از انجام به راحتی هم از طریق ترمینال ، هم از طریق ریکاوری و هم اسکریپت منیجر قابل دسترسی و اجرا خواهند بود ، بهترین راه استفاده از ترمینال برای اجرای اون ها است



* برای نوشتن اسکریپت می توانید از Notepad ++ و یا root explorer استفاده کنید

#1#

ادیتور را باز کرده و عبارت زیر را وارد کنید :


#!system/bin/sh


خوب حالا می تونیم شروع به نوشتم اسکریپت کنیم

#2# برای اجرای هرچه راحت تر اسکریپت ها ، پسوند آن ها را حذف و به مسیر system/bin انتقال می دهیم . حالا وارد ترمینال شده و می نویسیم :



su
chmod 755 system/bin/نام اسکریپت


حالا اسکریپت با نوشتن این کد ها همیشه اجرا میشه ( به جای abc نام اسکریپت رو بزارید (



su
abc



#3# تمامی عباراتی که با یک خط فاصله بعد از # قرار بگیرند اجرا نمی شوند . مثال :



#!system/bin/sh

# in yek mesal ast
# alireza7991

این اسکریپت خروجی ندارد

#4# برای نمایش یک عبارت بر روی صفحه نمایش از دستور زیر استفاده می شود :



#!system/bin/sh

echo "عبارت مورد نظر شما"

_ANONYMOUS_
02-02-2013, 22:12
#5# با استفاده از این دستور می توانید پرمیشن Permission یک فایل را تغییر دهید :



#!system/bin/sh

# chmod <permission> <file location>
# for example :
chmod 0644 system/app/browser.apk


#6# با این دستور می توانید در هر جا از برنامه خارج شوید


#!system/bin/sh

# exit <status>
# example :
exit 0

_ANONYMOUS_
02-02-2013, 22:23
#7# برای کپی فایل می توان از دستور ساده ی زیر استفاده کرد :



#!system/bin/sh

# dd if=<file location> of=<paste location>
# example :
dd if=/system/bin/1.apk of=system/app/1.apk

#8# برای ساخت یک پوشه جدید می توان از دستور زیر استفاده کرد :



#!system/bin/sh

# mkdir <folder location>
mkdir /sdcard/example

_ANONYMOUS_
02-02-2013, 22:38
#9# برای حذف یک فایل می توان از دستور زیر استفاده کرد :



#!system/bin/sh

# rm <file location>
# example :
rm /system/media/bootanimation.zip


اسکریپت بالا با حذف بوت انیمیشن ، بوت انیمیشن یک رام رو غیر فعال میکنه

* از این دستور میشه به صورت های ابتکاری استفاده کرد که بعدا توضیح خواهم داد *

#10# برای ریبوت کردن یا ریبوت به ریکاوری می توان از دستور های زیر استفاده کرد ، برای ریبوت عادی قسمت status رو اصلا ننویسید برای ریبوت به ریکاوری در قسمت status بنویسید recovery مثل اینجا :



#!/system/bin/sh

# reboot <status>
# reboot :
reboot
# reboot to recovery :
reboot recovery


* توجه کنید هرجا بعد از # فاصله گذاشتم توضیحات است *

_ANONYMOUS_
02-02-2013, 22:49
سلام

## خوب آموزش به حد کافی رسیده برای تمرین دادن ##

* چند تمرین که به راحتی با دستورات بالا می تونید انجام بدید :


1- اسکریپتی بنویسید که با اجرا بوت انیمیشن رام را به بوت انیمیشنی که در مسیر /sdcard قرار دارد تغییر دهد
2- برنامه ای بنویسید که از بوت انیمیشن یک رام یک بکاپ گرفته و یک پوشه در حافظه ساخته و آنجا ذخیره کند
3- اسکریپتی بنویسید که رام بوت انیمیشن رام را حذف و ریبوت کند

* تمرین های کمی حرفه ای تر *

1- با توجه به پارتیشن بوت خود اسکریپتی بنویسید که از کرنل فعلی بکاپ بگیرد،آن را در پوشه ای که خودش میسازد ذخیره کند سپس کرنل جدیدی را فلش کرده و حافظه ی دالویک کش را پاک و ریبوت کند


اگه این اسکریپت ها رو یاد گرفته باشید حداقل باید بتونید یکی از تمرین های ساده رو ساخته و اجرا کنید !

_ANONYMOUS_
03-02-2013, 18:03
#11# شاید بخواهید در هنگام شروع اسکریپت صفحه پاک شود ، به راحتی با قرار دادن این دستور صفحه پاک می شود :



#!/system/bin/sh

clean


#12# در صورتی که بخواهید متغییری را از کاربر دریافت کنید از دستور read استفاده کنید . نام متغییر که ورودی در آن ذخیره می شود بعد از read قرار می گیرد .



#!/system/bin/sh

read abc
echo "${abc}"

در مثال بالا یک ورودی گرفته و در abc ذخیره می کنیم سپس آن را نمایش می دهیم

GenomeX
03-02-2013, 19:20
با تشكر از عليرضا عزيز بابت آموزش مفيدشون... دوستان توجه كنند كه اين كدهاي ترمينال لينوكس هست و با كمي آشنا بودن با كامنتهاي ترمينال ميتونيد اسكريپ خودتون رو بنويسيد...
براي شروع و براي اينكه نشونتون بدم يكي از تمرينات آقا عليرضا رو حل ميكنم:

اجراي بوت انميشن رندوم يا دلخواه و لود از روي مموري كارت يا همون كاستوم بوت انيميشن (با تشكر از xda user:parasmi)


#!/system/bin/sh
#mount sdcard
mount /dev/block/mmcblk0p1 /sdcard
if [ "$?" = 0 ];
then

log -p i -t bootanimation "/sdcard succesfully mounted"

# specify directory for boot animation files
BA_DIR="/sdcard/bootanimation"

# check if boot animation is specified
BA_USE=${BA_DIR}"/bootanimation.use"
if [ -e $BA_USE ];
then
# use file specified in booatnimation.use
BA_FILE=${BA_DIR}"/"$(cat $BA_USE)

log -p i -t bootanimation "Using $BA_FILE"

# copy file to /data/local
cp $BA_FILE /data/local/bootanimation.zip

if [ "$?" = 0 ];
then
log -p i -t bootanimation "$BA_FILE successfully copied";
else
log -p e -t bootanimation "Error copying $BA_FILE";
fi

else
log -p i -t bootanimation "Choosing a random boot animation"

# temp file to hold list of animation files
BA_TMP=${BA_DIR}"/bootanimation.tmp"

# count number of animation files
ls ${BA_DIR}/*.zip > $BA_TMP
BA_COUNT=$(wc -l < $BA_TMP)

if [ $BA_COUNT -gt 0 ];
then
# generate 8bit random number, increase if more than 255 animations
RANDOM=$(hexdump -e '1/1 "%d"' -n 1 /dev/urandom)

# select random file
BA_NUM=$(($RANDOM % $BA_COUNT + 1))
BA_FILE=$(sed -n "${BA_NUM}"p ${BA_TMP})

# copy file to /data/local
cp $BA_FILE /data/local/bootanimation.zip

if [ "$?" = 0 ];
then
log -p i -t bootanimation "$BA_FILE successfully copied";
else
log -p e -t bootanimation "Error copying $BA_FILE";
fi

else
log -p e -t bootanimation "No boot animation files found";
fi

# delete tmp file
rm $BA_TMP

fi

#unmount SDCARD
umount /sdcard

else
log -p e -t bootanimation "Error mounting /sdcard"

fi


فايل نهايي رو در پوشه init.d‌يا پوشه bin ذخيره كنيد. يك پوشه به نام bootanimation در sdcard‌بسازيد و فايل zip‌رو اونجا قرار بديد تموم...

_ANONYMOUS_
03-02-2013, 22:32
سلام

ممنون ادیب عزیز ، راتسش وقت نکردم کامل بررسی کنم ش فقط یک توصیه اینکه روش Mount تون رو عوض کنید چون این پارتیشنی که الان به عنوان sdcard گذاشتید پارتیشن بوت لودر بعضی گوشی ها از جمله I9001 هست !

سعی می کنم اول از همه دستور های ساده رو کامل توضیح بدم ، بعد فرمت های باینری اطلاعات و حلقه ها و شرط ها و بعد شبکه و ... رو توضیح بدم

#13# دایرکتوری پیش فرض که هنگام ورود ترمینال در آن هستیم system/bin هست برای رفتن به محل های دیگر می توان از دستور cd به شکل زیر استفاده کرد :



#!/system/bin/sh

# cd <location>
cd /sdcard

در مثال بالا به مسیر sd می رویم

دستوراتی که توضیح می دم سوییچ های زیادی دارند که در آینده کامل توضیح خواهم داد

#14# برای نمایش دایرکتوری فعلی از دستور pwd استفاده می شود :


#!/system/bin/sh

cd /sdcard
pwd


#15# برای نمایش فایل های موجود در دایرکتوری فعلی می توان از دستور ls استفاده کرد ( همچنین با استفاده از سوییچ a- تمامی فایل های مخفی و عادی نشان داده می شوند )


#!/system/bin/sh

cd /sdcard
pwd
echo " please enter any thing to continue "
read aaa
clear
ls -a


#16# برای کپی یک فایل از دستور cp به شکل زیر استفاده می شود :



#!/system/bin/sh

cp /proc/cpuinfo /sdcard/cpuinfo
cd /sdcard
cat cpuinfo

Ahmad.HA
14-02-2013, 12:45
ممنون ادیب عزیز ، راتسش وقت نکردم کامل بررسی کنم ش فقط یک توصیه اینکه روش Mount تون رو عوض کنید چون این پارتیشنی که الان به عنوان sdcard گذاشتید پارتیشن بوت لودر بعضی گوشی ها از جمله I9001 هست !


سلام
تو يه اسكريپت ديدم از اين دستور براي پيدا كردن sd استفاده شده بود:

for NUM in `seq 0 9`;
do
TMP=`cat /sys/block/mmcblk$NUM/device/type`
if [ "$TMP" = "SD" ]; then
SD="/dev/block/mmcblk${NUM}"
break
echo "SD Partition is ${SD}"
else
echo "No SD Card found."
return
fi
done

اين اسكريپت SimpleOdexer (http://forum.xda-developers.com/showthread.php?t=2136480) رو هم من براي اودكس كردن رام درست كردم با تشكر از آقا عليرضا
اگه يه تست كنيد خوشحال ميشم.
راستي ادامه آموزش چي شد؟

_ANONYMOUS_
14-02-2013, 13:19
سلام دوباره !

خوب یه مدتی نت قطع بود ... سرم هم شلوغه پس آموزش لاک پشتی جلو میره .. دوستان میتونن کمک کنند فقط سعی کنید سبک آموزش ثابت باشه و با نظم جلو بره .

#17# علامت * وقتی بکار میره به معنی تمام چیز های انجا هست با مثالی که توسط andyabc @ xda هست می تونید بهتر متوجه بشید :



#!/system/bin/sh

# dalvik cache clean by andyabc @ XDA
rm /data/dalvik-cache/*
reboot

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


rm /system/app/*.odex

این مثال تمامی فابل های با پسوند .odex را در پوشه ی سیستم اپ حذف میکند . فقط حتما توجه کنید که نباید بین * و / فاصله باشه والا دستور rm اون رو به عنوان یه فایل دیگه برای حذف شناسایی میکنه وچون * هست یعنی تمامی فایل های رم دیسک !

# پاسخ به احمد جان #

اگه اسکریپتی که ادیب جان گداشتن از داخل رام اجرا بشه اصلا احتیاجی به مونت کردن sd نیست .

در ضمن اسکریپتتون خیلی خوب هست ... GoodJOB ... چند تا پیشنهاد :

1- می تونید اسکریپت رو توسط یک فایل قابل نصب از ریکاوری به مسیر /system/bin ببرید و پسوند .sh رو حذف کنید . من این کار رو برای toolchain خودم انجام دادم .. بعدش فقط تو ترمینال کافیه مثلا نوشته بشه SimpleOdexer تا اسکریپت اجرا بشه
2- بهتره اسکپریت وایپ دالویک رو هم اضافه کنید همین بالا گفتم چطوریه

_ANONYMOUS_
14-02-2013, 13:32
#18# با دستور md5sum می توان شناسه ی md5sum یک فایل رو بدست بیاریم ... مثلا بعضی وقت ها خراب نبودن یک فایل بر اثر دانلود برامون مهم هست ، به سادگی می توان md5sum فایل اصلی رو بدست بیاریم سپس در اسکرپیت تعریف کنیم اگه md5sum فایل متفاوت بود ارور بده فایل خراب هست یا بدون این کار با سوییچ -s به خود کامند دستور بدیم چک کنه... این پروسه در ادین برای رام ها انجام میشه !


# md5sum < file location >
md5sum /system/build.prop


#18# دستور logcat که از اسمش معلومه logcat رو نشون میده ... در اسکریپت نویسی خیلی ازش استفاده نمیشه اما برای چک کردن اسکریپت ها مفید هست !


# logcat
logcat

#19# دستور uptime زمان بالا اومدن رام رو اعلام میکنه ... توضیح و مثال نداره کافیه تایپ کنید uptime استفاده های جزیی میشه ازش کرد !


uptime

_ANONYMOUS_
26-02-2013, 21:14
برای تغییر نام فایل ها می توان از دستور MV که برای انتقال فایل ها بکار می رود استفاده کنیم به شکل زیر :


mv /system/build.prop /system/build.zip


برای زیپ کردن فایل ها می توانید از دستور gzip استفاده کنید



gzip /system/build.prop


برای نوشتن در build.prop کافیست به شکل زیر از این دستور استفاده کنید :


setprop debug.sf.nobootanimation=1

EAGLEBOOY
17-04-2013, 07:28
سلام
ناراحت نشی ها ، من این پست رو پاک میکنم
فقط یک سوال،‌ که اگه اینو جواب بدی مشکلم حل میشه بقیه رو لازم ندارم، فقط اگه حال داری جواب بده
میتونی بگی چطور میشه یک خط رو از یک فایل پاک کنم؟
البته میخوام این کار رو از طریق ریکاوری انجام بدم
این رو قبلا خودم نوشتم
اما فقط خطها رو اضافه میکنه ولی خطهایی که باید پاک کنه رو پاک نمیکنه

#!/sbin/sh

sed '/ro.service.swiqi.supported=true/d' /system/build.prop
sed '/persist.service.swiqi.enable=1/d' /system/build.prop
echo "ro.service.swiqi2.supported=true" >> /system/build.prop
echo "persist.service.swiqi2.enable=1" >> /system/build.prop

میتونی بهم بگی چطور از فایل بکاپ بگیرم؟ اگه سخته و به زحمت میوفتی نمیخواد چون اصلا مهم نیست

یک نمونه دیگه هم دارم که از ریکاوری اجرا نمیشه اما با برنامه gscript خیلی خوب خطها رو جایگزین میکنه

#!/bin/bash

sed -i '/linetobereplaced/c\replacedline.' /system/build.prop

دستوری که برای اجرا از ریکاوری میدم اینه:

package_extract_file("upd-build-prop.sh", "tmp/upd-build-prop.sh");
set_perm(0, 0, 0777, "tmp/upd-build-prop.sh");
run_program("tmp/upd-build-prop.sh");

این رو هم پیدا کردم
http://forum.xda-developers.com/showpost.php?p=19093919&postcount=20
ببین من سه تا آپشن برای تغییر build.prop دارم که از طریق آروما قابل انتخاب هستند
با این لینک بالا فقط آپشن سوم من اعمال میشه و آپشن اول و دوم اصلا اعمال نمیشه، نمیدونم چرا!!!
کارش اینه که دنبال خطهایی که بهش میدی میگرده و اگه اون خط در قبل از "=" با هم برابر بودند آنوقت بعد از مساوی رو جایگزین میکنه و اگر آن خط را پیدا نکرد ان را به انتها اضافه میکنه

این هم پیدا کردم که اصلا کار نمیکنه ،‌ نمیدونم چرا!!!
http://forum.xda-developers.com/showpost.php?p=25977898&postcount=15

Ahmad.HA
17-04-2013, 09:28
سلام ببخشید، من بدون اجازه اساتید با یه مثال پاسخ میدم!
من الان یک فایل درست کردم به نام density.sh تا با اون چگالی پیکسل که تو build.prop هست رو تغییر بدم.
به این صورت:

#!/sbin/sh
if [ ! -f /system/bin/build.prop ]; then
cp /system/build.prop /system/build.bak
sed -i 's/ro.sf.lcd_density=160/ro.sf.lcd_density=120/g' /system/build.prop
else
cp /system/bin/build.prop /system/bin/build.bak
sed -i 's/ro.sf.lcd_density=160/ro.sf.lcd_density=120/g' /system/bin/build.prop
fi;

و به همون صورت که گفتید از ریکاوری اجرا کردم:

ui_print("Change Density Script");
ui_print("Running Script...");
package_extract_file("density.sh", "tmp/density.sh");
set_perm(0, 0, 0777, "tmp/density.sh");
run_program("tmp/density.sh");
ui_print("Everything is OK!");

خب نتیجه کار:

840632 840633

می بینید که چگالی پیکسل ها به راحتی عوض شد و یک فایل پشتیبان هم از build.prop درست شد.
فقط دقت کنید که من دستور mount رو تو اسکریپت قرار ندادم و بصورت دستی توی ریکاوری mount کردم.

حالا توضیح در مورد دستور ها:


if [ ! -f /system/bin/build.prop ];
این قسمت به این دلیل اضافه شده که بعضی رام ها یه build.prop دوم در مسیر system/bin دارن که در هر بوت جایگزین build.prop اصلی میشه و اگه اون موجود بود اسکریپت اون رو تغییر میده.


cp /system/build.prop /system/build.bak
این هم مربوط به گرفتن فایل پشتیبان از build.prop فعلی، یه دستور کپی ساده!
موفق باشید.

ویرایش: اینم فایل نصبی از ریکاوری خدمت شما:
http://db.tt/sqiuA91L

EAGLEBOOY
17-04-2013, 18:43
سلام ببخشید، من بدون اجازه اساتید با یه مثال پاسخ میدم!
من الان یک فایل درست کردم به نام density.sh تا با اون چگالی پیکسل که تو build.prop هست رو تغییر بدم.
به این صورت:

#!/sbin/sh
if [ ! -f /system/bin/build.prop ]; then
cp /system/build.prop /system/build.bak
sed -i 's/ro.sf.lcd_density=160/ro.sf.lcd_density=120/g' /system/build.prop
else
cp /system/bin/build.prop /system/bin/build.bak
sed -i 's/ro.sf.lcd_density=160/ro.sf.lcd_density=120/g' /system/bin/build.prop
fi;

و به همون صورت که گفتید از ریکاوری اجرا کردم:

ui_print("change density script");
ui_print("running script...");
package_extract_file("density.sh", "tmp/density.sh");
set_perm(0, 0, 0777, "tmp/density.sh");
run_program("tmp/density.sh");
ui_print("everything is ok!");

خب نتیجه کار:

840632 840633

می بینید که چگالی پیکسل ها به راحتی عوض شد و یک فایل پشتیبان هم از build.prop درست شد.
فقط دقت کنید که من دستور mount رو تو اسکریپت قرار ندادم و بصورت دستی توی ریکاوری mount کردم.

حالا توضیح در مورد دستور ها:


if [ ! -f /system/bin/build.prop ];
این قسمت به این دلیل اضافه شده که بعضی رام ها یه build.prop دوم در مسیر system/bin دارن که در هر بوت جایگزین build.prop اصلی میشه و اگه اون موجود بود اسکریپت اون رو تغییر میده.


cp /system/build.prop /system/build.bak
این هم مربوط به گرفتن فایل پشتیبان از build.prop فعلی، یه دستور کپی ساده!
موفق باشید.

ویرایش: اینم فایل نصبی از ریکاوری خدمت شما:
http://db.tt/sqiua91l

سلام
میتونی بگی چطور یک خط رو حدف کنم؟ اینی که شما دادی خط رو جایگزین میکنه اما اگه خط وجود نداشته باشه چی؟پس به نظرم ساده ترین راه اینه که اول خط ها رو پاک کنم سپس خطهای جدید رو به انتها اضافه کنم

Ahmad.HA
17-04-2013, 20:15
سلام
میتونی بگی چطور یک خط رو حدف کنم؟ اینی که شما دادی خط رو جایگزین میکنه اما اگه خط وجود نداشته باشه چی؟پس به نظرم ساده ترین راه اینه که اول خط ها رو پاک کنم سپس خطهای جدید رو به انتها اضافه کنم
سلام
اشکالی نداره پست میدم، علیرضا از خودمونه!
آقا مشکل اون اسکریپتی که تو xda هست رو پیدا کردم، اینه:

sed -i "/${newprop}/d" /system/build.prop
اشکال اینجاست که دستور sed فقط string قبول میکنه یعنی اگه شما بخواید یه مقدار متغییر مثل ${newprop} بش بدید اصلا عمل نمی کنه!
حالا اینجا یه سوال پیش میاد که چجوری این مقدار ها رو بش بفهمونیم؟
لطفا هر کی بلده ما رو هم با خبر کنه!
من حتی این شکلی هم سعی کردم مقدار بش بدم ولی نشد:

"`echo ${newprop}`"

خب حالا راه حل چیه؟
فعلا اینه :دی
[CODR]#!/sbin/sh

# Detecting build.prop
if [ -f /system/bin/build.prop ]; then
BP="/system/bin/build.prop"
else
BP="/system/build.prop"
fi;

# Making Backup
cp ${BP} ${BP}.bak

# Adding Tweak
TWEAK="windowsmgr.max_events_per_sec=50"
export FILE=$(echo ${TWEAK} | cut -d '=' -f1)
FIND="`cat ${BP} | grep ${FILE}`"
if [[ ! "${FIND}" == "" ]]; then
sed -i "/windowsmgr.max_events_per_sec=*/d" ${BP}
fi;
echo ${TWEAK} >> ${BP}[/CODE]

من اینجا برای مثال توییک windowsmgr.max_events_per_sec=50 رو تو build.prop اعمال کردم.
خب کاری که شما باید انجام بدید اینه که برای همه توییک هاتون مرحله Adding Tweak رو بنویسید!
خب یکم ضایس ولی کارتون راه می افته!
دلیل این کار هم اینه که نمی تونیم به این sed لعنتی یه مقدار متغییر بدیم، ببخشید عصبی شدم!
در صورتی بتونیم یه جوری مقدار بش بدیم، با یه حلقه for عملیات به اینصورت خیلی ساده میشه:

# Adding Tweaks
for TWEAK in dalvik.vm.startheapsize=24m windowsmgr.max_events_per_sec=150 put.tweaks.here=120 ; do
export FILE=$(echo ${TWEAK} | cut -d '=' -f1)
FIND="`cat ${BP} | grep ${FILE}`"
if [[ "${FIND}" == "" ]]; then
echo ${TWEAK} >> ${BP}
else
sed -i 's/${FIND}/${TWEAK}/g' ${BP}
fi;
done;

دیگه شرمنده بیشتر از این بلد نیستم.
ویرایش: علیرضا کجایی؟ کمک کن دیگه!

EAGLEBOOY
18-04-2013, 11:58
سلام
کمک هات خیلی سازنده بود
درسته که همه موارد به دردم نخورد ولی با گذشت همین مدت زمان کم یکی یکی دارم از نوشته هات بهره میبرم
مرسی ، تشکر
اگه بخوام بکاپ رو برگردونم ،چکار کنم؟
باید همون متد بکاپ رو عمل کنم؟ یا اینکه اول باید فایل اصلی رو پاک کنم سپس بکاپ رو جایگزین کنم؟
در ضمن یک سوال:
اول از همه بگم که من هنوز اول راه هستم توی اسکریپت نویسی
دوم زیاد هم خنگ نیستم و این چیزا رو راحت میفهمم
فقط باید با چند تا چیز ابتدایی آشنا بشم
من چند جا دیدم که از دستور echo -e استفاده کردند اما خیلی ها گفته بودند -e برای echo تعریف نشده است
یک سوال دیگه
این حروف که بعد از دستورات اصلی میاد چیه؟
مثلا e یا i
اون علامت منفی چیه؟
یه سوال دیگه
توی دستور sed : علامت d که برای حذف کردن است ، چرا آخر میاد؟ چرا مثل i ، درست بعد از sed قرار نمیگیره؟

Ahmad.HA
18-04-2013, 12:44
سلام
کمک هات خیلی سازنده بود
درسته که همه موارد به دردم نخورد ولی با گذشت همین مدت زمان کم یکی یکی دارم از نوشته هات بهره میبرم
مرسی ، تشکر
اگه بخوام بکاپ رو برگردونم ،چکار کنم؟
باید همون متد بکاپ رو عمل کنم؟ یا اینکه اول باید فایل اصلی رو پاک کنم سپس بکاپ رو جایگزین کنم؟
در ضمن یک سوال:
اول از همه بگم که من هنوز اول راه هستم توی اسکریپت نویسی
دوم زیاد هم خنگ نیستم و این چیزا رو راحت میفهمم
فقط باید با چند تا چیز ابتدایی آشنا بشم
من چند جا دیدم که از دستور echo -e استفاده کردند اما خیلی ها گفته بودند -e برای echo تعریف نشده است
یک سوال دیگه
این حروف که بعد از دستورات اصلی میاد چیه؟
مثلا e یا i
اون علامت منفی چیه؟
یه سوال دیگه
توی دستور sed : علامت d که برای حذف کردن است ، چرا آخر میاد؟ چرا مثل i ، درست بعد از sed قرار نمیگیره؟

باز هم مجددا سلام! به ترتیب پاسخ میدم.
نوکرتم!
ممنون!
خواهش میکنم!
برای برگردوندن بک آپ فرقی نداره، این شکلی خوبه:

cp ${BP}.bak ${BP}
rm -f ${BP}.bak

آقا راستی من مود Xperia Ultimate شما رو دیدم بسیار عالی بود.
خودمم هیچی اسکریپت نویسی بارم نیست، اشکالی نداره با هم یاد میگیریم.
والا اگه می بینید زیاد توضیح میدم واسه اینه که یه وقت اگه یه نفر اومد گیج نشه، وگرنه قصد توهین نداشتم.

در مورد echo -e اطلاعی ندارم.
این حروفی که بعد از دستور میاد مثل همین echo -e رو اصطلاحا سوییچ دستور میگن.
این سوییچ ها می تونن خواص خاصی به دستور بدن، مثلا شما دستور zip رو در نظر بگیرید.
اگه دستور رو بصورت zip -d استفاده کنیم، باش می تونیم محتویات درون یه فایل زیپ رو پاک کنیم.
و اگه بصورت zip -m استفاده کنیم، می تونیم محتویات مورد نظرمون رو به درون فایل زیپ منتقل کنیم.

در مورد دستور sed هم دلیل اون رو نمیدونم ولی خب تو ترمینال این دستور این شکلی تعریف شده دیگه.
برای آشنایی با دستور های مختلف مثل همین sed و کاربرد هاشون پیشنهاد میکنم "ﺁﻣﻮﺯﺵ ﺩﺳﺘﻮﺭﺍﺕ ﺗﺮﻣﯿﻨﺎﻝ ﻟﯿﻨﻮﮐﺲ ﺑﻪ صورت کامل" رو مطالعه کنید، دستور ها رو با مثال گفته خیلی هم آسونه.
امیدوارم تونسته باشم کمکتون کنم.

EAGLEBOOY
18-04-2013, 12:58
اینو ببین
sed -i 's/echo 450 > $dev/button-backlight/max_current/echo 1 > $dev/button-backlight/max_current/g' /system/etc/hw_config.sh
توی این قسمت زیاد از "/" استفاده شده ، به نظرت قاطی نمیشه؟
نمیشه متن رو با " " مشخص کرد؟

Ahmad.HA
18-04-2013, 14:20
اینو ببین
sed -i 's/echo 450 > $dev/button-backlight/max_current/echo 1 > $dev/button-backlight/max_current/g' /system/etc/hw_config.sh
توی این قسمت زیاد از "/" استفاده شده ، به نظرت قاطی نمیشه؟
نمیشه متن رو با " " مشخص کرد؟

بله درسته اینجا باز هم sed درست عمل نمیکنه.
باز هم میگم اگه کسی بلده چطور میشه از sed تو این موارد استفاده کرد لطفا به ما هم بگه، متاسفانه با " " هم جواب نمیده.
خب حالا فکر کنم یه روشی واسه اعمال این توییک ها بدون دستکاری hw_config.sh هست، می تونیم به صورت یه اسکریپت init.d اعمالشون کنیم.
اول یه فایل به نام 99XperiaUltimate درست میکنیم به این صورت:

#!/system/bin/sh
# Xperia Ultimate Tweaks
echo 1 > $dev/button-backlight/max_current
دقت کنید اون 99 توی اسم فایل، اولویت اجرای این اسکریپت هست.
و بعد در مسیر system/etc/init.d قرارش میدیم و پرمیشن رو اعمال میکنیم.
این روش رو تست نکردم ولی ان شاالله عمل میکنه، لطفا تست کنید و خبر بدید.

:.A.L.I.R.E.Z.A.:
18-04-2013, 18:46
فقط دو دوست عزیز منم با اجازه استارتر(اجازه نده خفش میکنم)یه پیام بازرگانی میدم:
واسه فهمیدن کار اون پسوند ها میتونید دستور رو خالی تو ترمینال بزنید.
مثلا تو ترمینال فقط بنویسید sed تمام پیشوند هایی که براش تعریف میشه و کارشون رو نمایش میده

EAGLEBOOY
19-04-2013, 03:54
یک چیز توپ یاد گرفتم
فقط جونم به لبم رسید تا فهمیدم،کلی سایت خارجی رو زیر و رو کردم تا یاد گرفتم ( تازه با وجود اینکه زبان انگلیسیم ضعیفه )
توی فرمان s برای متد sed شما میتونی از هر علامتی برای مشخص کردن متن استفاده کنی
به این صورت که در ابتدا و انتهای متن اون علامت رو میاری
اینجوری مشکلمون حل میشه
هر چی که دوست داری بزار ، فقط کافیه توی متن پیدا نکنی
یعنی هر چی که بعد از s بیاید عامل محدود کننده است
مثل
:
/
\
|
_
مثال:میخوام نوشته/usr/local/bin را با /common/bin جایگزین کنم

sed 's_/usr/local/bin_/common/bin_g'
sed 's:/usr/local/bin:/common/bin:g'
sed 's|/usr/local/bin|/common/bin|g'
عجب دنیاییه ها ،خدایی کلی حال کردم
اینم منبع:
http://www.grymoire.com/Unix/Sed.html
http://www.pement.org/sed/sed1line.txt
http://sed.sourceforge.net/sedfaq3.html

Ahmad.HA
20-04-2013, 22:35
سلام محمد، منم یه چیزایی یاد گرفتم ببین بدردت میخوره.
فکر کنم اون اسکریپتی که گفتم به این دلیل کار نکرد که dev رو تعریف نکرده بودیم!
این شکلی احتمالا کار میکنه:

#!/system/bin/sh
# Xperia Ultimate Tweaks
dev=/sys/devices/i2c-0/0-0040/leds
echo 1 > $dev/button-backlight/max_current
کار نکرد هم مهم نیست چون با اون روشی که پیدا کردی میشه تغییرش داد، دمت گرم.

یه روش هم برای اعمال توییک های build.prop پیدا کردم، با دستور setpropمثلا:

#!/system/bin/sh
setprop persist.adb.notify 0
setprop persist.sys.usb.config mass_storage,adb
با دستور getprop هم میشه این جور مقادیر رو دید.

و دیگه اینکه با همین دستور setprop فکر کنم بشه یه کاری کرد که تو aroma وقتی کاربر یه زبانی رو انتخاب میکنه، رام که نصب شد با همون زبان بیاد بالا.
واسه فارسی fa.sh رو این شکلی تعریف کنیم:

#!/bin/bash
setprop persist.sys.language fa
setprop persist.sys.country IR
بعد اگه کاربر زبانو انتخاب کرد اجراش می کنیم:

if
file_getprop("/tmp/aroma/lang.prop","selected.0") == "1"
then
package_extract_file("lang/fa.sh", "tmp/fa.sh");
set_perm(0, 0, 0777, "tmp/fa.sh");
run_program("tmp/fa.sh");
endif;
اینا رو تست نکردم ولی به نظرم کار میده.

:.A.L.I.R.E.Z.A.:
14-06-2013, 16:33
فقط دو دوست عزیز منم با اجازه استارتر(اجازه نده خفش میکنم)یه پیام بازرگانی میدم:
واسه فهمیدن کار اون پسوند ها میتونید دستور رو خالی تو ترمینال بزنید.
مثلا تو ترمینال فقط بنویسید sed تمام پیشوند هایی که براش تعریف میشه و کارشون رو نمایش میده

دوستان بعضی از دستورات رو اگه خام وارد کنید ممکنه گوشی به فنا بره مراقب باشید
با تشکر از alireza7991

_ANONYMOUS_
12-10-2013, 16:52
سلام ؛ اگه قصد دارید داخل اسکریپت های شلتون چندتا کار رو همزمان انجام بدید یا اسکریپت های چندرشته ای بسازید که روی پردازنده های چند هسته ای پرفورمنس بیشتری داشته باشه میتونید از ابزاری که کدنویسی کردم استفاده کنید : http://forum.xda-developers.com/showthread.php?t=2444467

_ANONYMOUS_
12-10-2013, 16:54
در صورتی که قصد دارید از اعداد تصادفی داخل اسکریپتتون استفاده کنید میتونید از ابزاری که کدنویسی کردم استفاده کنید : http://forum.xda-developers.com/showthread.php?t=2351742

_ANONYMOUS_
12-10-2013, 16:57
یکی دیگه : http://forum.xda-developers.com/showthread.php?t=2404326

tirazhe_m
01-04-2014, 10:32
درود

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

دوستان یک خواهش اگر اسکرپیت می نویسید میشه لطف کنید کاربرد اون رو ذکر کنید .
ممنونم