آموزش همگام شل اسکریپت نویسی

مباحث مربوط به زبان های برنامه نویسی در لینوکس

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز Ali_Gh » یک شنبه اسفند 16, 88 3:01 pm

خب پیشنهاد من تا آخر ۵۵ هستش. می‌شه ۴۷ تا ۵۵. دلیلش اینه که از اونجا به بعد می‌رسیم به ساختار‌های تصمیم گیری.
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز moslem.b » سه شنبه اسفند 18, 88 9:31 pm

این قسمت مطلب زیادی نداشت به نظر من تنها مطلب مهمش استفاده از & توی دستورات بود
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز Ali_Gh » پنج شنبه اسفند 19, 88 1:44 am

این بخش هم جالب بود. فقط متاسفم که این قدر دیر اومدم. بد جوری گرفتار درس و لینوکس شدم
در مورد این دستور
کد: گزینش همه
 tail +20 < hotel.txt | head -n30 >hlist

من خروجی نگرفتم ولی با این یکی جواب داد
کد: گزینش همه
tail -n 20 < the100 | head -n30 >hlist


به جرئت می‌گم دستور pstree یکی از زیباترین دستوراتی بود که در شل دیدم/
:mrgreen:

توی تمرین‌ها شم خاموش کردن اسپیکر گزینه‌ی جالبی بود.
در بخش بعدی ۵۵ تا ۶۳ رو پیشنهاد می‌کنم
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز Ali_Gh » شنبه اسفند 21, 88 1:18 am

خب من این قسمت رو دیدم، به نظر این بخش یکم نیازبه تمرین داره.
پیشنهاد می‌کنم چند اسکرپیت بنویسیم تا کاربرد این جداول صفحه ۶۲ حسابی دستمون بیاد و بتونیم باهاشون کنار بیایم و به قولی ملکه‌ی ذهنمون بشن
به محض اینکه اسکریپت‌هام حاضر شد اینجا می‌گذارمشون.
حالت آرمانی اینه که اسکرپیت‌ها حالت کاربردی داشته باشند - که البته من در این مورد هیچ قولی نمی‌دم ;) )
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز moslem.b » یک شنبه اسفند 23, 88 9:25 pm

خوب رسیدیم به دستور مورد علاقه ی من یعنی همون if :D

علی جون منتطر اسکریپت هات هستیم :P
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز Ali_Gh » چهار شنبه اسفند 26, 88 8:41 pm

moslem.b نوشته است:خوب رسیدیم به دستور مورد علاقه ی من یعنی همون if :D

علی جون منتطر اسکریپت هات هستیم :P


چی چی منتظر اسکریپت‌هات هستیم؟! دهنم گچی شده این ساختار ایف پدرم رو در آورد...
اصلا من گفتم «با هم»!
می‌خواین از زیرش در برین؟
اصلا خودتون هم باید اسکریپت بیارین ارائه بدین وگرنه جلوتر نمی ریم (مخصوصا تو مسلم) :twisted:
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز Ali_Gh » پنج شنبه فروردین 5, 89 2:37 pm

خیلی خب مشخصه که من گرفتار درس‌هام هستم و همین باعث می‌شه دیر به دیر فرصت کنم بیام :?
ولی این دفعه خبرای خوبی دارم:
دو تا اسکریپت نوشتم با کمک ساختار تصمیم if که البته اونقدر‌ها هم کاربردی نیستن ولی خب دیگه بیاین گیر ندیم ;)

اولیش که مربوط به نمایش مودب ساعت در روز هستش اینجاست:
کد: گزینش همه
#!/bin/bash
#
# polite time viewer
#
# * Licensed under terms of GNU/GPL v.3
# * author: Ali Ghanavatian
#
#$x= `date +"%T"` #did not work! :-S
x=$(date +"%H")
now=$(date +"%r")
# echo -e "it's $now and the X is $x"
if test $x -gt 12 -a $x -lt 17
then
echo -e "Good after noon master, it's $now"
fi

if test $x -gt 17 -a $x -lt 24
then
echo -e "Good evening master, it's $now"
fi

if test $x -lt 12
then
echo -e "Good morning master, it's $now"
fi

echo -e "have a great time"


و اینم دومیش که تعداد حروف اسم و فامیل رو می‌شماره

کد: گزینش همه
#!/bin/bash
#
# an script for counting name's letter
# Licensed under terms of GNU/GPL v.3
# author: Ali Ghanavatian
#
echo "Please enter your first name:"
read fname
fc=$[`echo $fname|wc --chars`-1] # rahmat bar pedar o madare Alen Baghumian :)
echo "alright $fname, now enter your last name:"
read lname
lc=$[`echo $lname|wc --chars`-1]
echo -e "\n--------------------------------------------------------------"
if test $fc -lt 3 -o $lc -lt 3
then
echo -e "\nWARNING! the first or last name may not be accurate!"
fi
echo -e "Dear $fname $lname, here's our character counting result:\n"
echo "$fname : $fc"
echo "$lname : $lc"
echo -e "\nthank you for choosing our service!"


راستش دارم به یک اسکریپت فکر می‌کنم که تشخیص بده چه میز کار(ها)یی روی سیستم نصب هستند و کدومشون در حال حاضر اجرا شده (فکر کنم دردسرش زیاد باشه پس این پروژه باشه واسه تابستون تا ببینیم آخر این آموزش اسکریپت نویسی چی می‌شه)

نکته‌ای که خیلی اذیتم کرد، مربوط به عبارت test بعد از if بودش که اصلا نمی‌فهمیدم به چه درد می‌خوره، بعدش که دقت کردم (بعد از چند روز) فهمیدم که برای عبارات مقایسه‌ای باید حتما از این عبارت استفاده بشه وگرنه ساختار if کلا جواب نمی‌ده

خیلی خب، اگه مخالفت یا حرف و حدیثی نیست بریم گام بعدی که ساختار if رو کامل‌تر گفته
به نظرم تا صفحه‌ی ۶۹ بخونیم که با خیال راحت ساختار تصمیم if رو بگذاریم کنار... البته کنار دستمون! :mrgreen:
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

The following 2 users would like to thank Ali_Gh for his or her post:
moslem.b, NabiKAZ

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز Ali_Gh » یک شنبه فروردین 7, 89 1:22 am

وای خدای من این اسکریپت نویسی برای بَش عجب کار سخت و لذت بخشیه!
در مورد ساختار تصمیم مشکل داشتم که به یک حقیقت ناب نائل شدم..
من اگر کامروا گشتم و خوشدل چه عجب کاربری بودم و شل را به ذکاتم دادند
8-)
اولین چیزی که فهمیدم اینه که «فاصله» در اسکریپت نویسی بی‌نهایت مهمه، برای مثال می‌تونم به این دستور اشاره کنم
کد: گزینش همه
if [$str1 = "yes" -o $str2 = "YES" ]; then

حالا شما بیاین یک فاصله رو توی این خط حذف کنین یا جابه‌جا کنین! دیوووونه‌تون می‌کنه
:lol:

و اما یک نکته‌‌ای که یاد گرفتم این بوده که اون عبارت test رو وقتی از براکت‌ها استفاده می‌شه، دیگه نیازی نیست بنویسیم.
و البته برای آزمایش رشته‌ها مثل مثال بالا، بهترین کار این هستش که از همون براکت‌ها استفاده بشه (با رعایت فاصله‌ها) مخصوصا وقتی چند عبارت رو داریم تحت عمولند‌های منطقی and or یا not قرار می‌دیم

خب این از این. اما جدیدا netBeans 6.8 رو دانلود کردم و نصبیدم. دارم سعی می‌کنم پروژه‌ی درس نرم افزارم رو با وب سرور جاوا بنویسم، یک آموزش هم از VTC گرفتم که فعلا خوب بوده. اما برای نوشتن یک سرولت ساده دهن آدم گچی می‌شه؛ با وجود اینکه می‌تونستم از خود netBeans کمک بگیرم، تصمیم گرفتم به روش سنتی یک سرولت بنویسم که یک ساعتی وقتم رو گرفت. خلاصه کلام اینکه، می‌خوام اسکرپیتی که مربوط به ساختن فایل‌های war. می‌شه رو اینجا بگذارم براتون. البته یک سری پیش‌نیاز‌هایی داره که اون‌ها رو ضمیمه می‌کنم
اما سورس اصلی اسکریپت اتوماتیک کردن این فرآیند
کد: گزینش همه
#!/bin/bash
#
# the script creates .war file which is an Java application
# * published under terms of GNU/GPL v.3
# * author: Ali Ghanavatian
#
echo "enter DIR name:"; # a directory for the java application
read theDir
if test -d $theDir # check for directory existance
then
echo "\"$theDir\" directory exist, to confirming delete enter[Y]"
read ans
if [ $ans = "y" -o $ans = "Y" ]; then
rm -r ./$theDir
echo "hint: <$theDir> directory has been deleted..."
else
echo "fatal error: <$theDir> bad directory name"
exit 1
fi
fi
## starting build directory process...
mkdir $theDir
mkdir $theDir/WEB-INF
mkdir $theDir/WEB-INF/classes
# asking for .java Source: [modification after STRINGS]
echo "please enter your .java filename without extension (like: myCode)"
read srcfile
srcfullfile=$srcfile".java"
if [ -f $srcfullfile ]; then
echo "OK with $srcfullfile"
else
echo "fatal error: <$srcfullfile> file not found"
exit 1
fi
# locating sun glass fish folder path
if [ -f sgepath.txt -a -f `cat sgepath.txt`"/lib/javaee.jar" ]; then
echo "OK with locating j2ee lib path"
else
echo "fatal error: <sgepath.txt> file not found"
exit 1
fi
j2eelib=`cat ./sgepath.txt`"/lib/javaee.jar"
if javac -cp $j2eelib $srcfullfile; then
echo "source compiled..."
else
echo "failed to complie source"
exit 1
fi
cp $srcfile".class" $theDir/WEB-INF/classes
if [ -f web.xml ]; then
echo "OK with web.xml" ## more modification after reading STRINGS
else
echo "web.xml file not found"
exit 1
fi
cp web.xml $theDir/WEB-INF/
cd $theDir
if jar cvf $srcfile".war" .
then
echo "done with packaging, $srcfile.war is ready"
else
echo "fatal error"
exit 0
fi
echo "copiny to autodeploy folder..."
adeploypath=`cat ../sgepath.txt`"/domains/domain1/autodeploy"
cp $srcfile".war" $adeploypath
cd ..
echo "Done."


-------
یک نکته‌ی قشنگ دیدم برای رفع اشکال اسکریپت‌ها کافیه بعد از bin/bash/!# یک کاراکتر فاصله داده و بعدش x- وارد کنیم یعنی این جوری:
کد: گزینش همه
#!/bin/bash -x


راستی گفتم «فاصله» مهمه، چند تا نکته رو هم مرور کنم همینجا:
* برای دادن مقدار به متغییر‌ها فاصله‌ای بین طرفین و مساوی نباید باشه
* برای چسباندن دو مقدار رشته‌ای به همدیگر کافی‌است آن‌ها را بدون فاصله کنار هم بگذارم: مثل
کد: گزینش همه
x=hell
xw=$x"o world"
echo $xw

که نتیجه‌ می‌ده: hello world
:mrgreen:
پیوست ها
prequesties.zip
شامل سورس جاوای یک سرولت سلام به دنیا؛ سورس ایکس ام مورد نیاز برای کامپایل و فایل متنی که باید حاوی مسیر به پوشه‌ی glassfish باشه
(829 بایت) 222 بار دریافت شده است
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

The following 2 users would like to thank Ali_Gh for his or her post:
moslem.b, NabiKAZ

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز moslem.b » یک شنبه فروردین 8, 89 11:00 pm

ایول علی جون اسکریپت هات جالب بودن

در مورد فاصله ها بارها واسه خودم پیش اومده که مشکل ساز بودن ولی من دقیقا" متوجه نشدم این x- که بعد از bash گذاشتی چه کاری انجام میده

پ.ن:یادش بخیر این اولین اسکریپتی بود که نوشتم و از دستور if توش استفاده کرده بودم
کد: گزینش همه
#!/bin/sh


echo please choose 1 or 2
echo ----------------------
echo 1- Backup Package
echo
echo 2- Restore Package
echo ----------------------

read name

if [ $name = "1" ]
then
mkdir ~/Desktop/Backup
mkdir ~/Desktop/Backup/lib
mkdir ~/Desktop/Backup/etc
mkdir ~/Desktop/Backup/apt
cp -r /var/cache/apt/archives ~/Desktop/Backup
cp -r /etc/apt ~/Desktop/Backup/etc
cp -r /var/lib/apt ~/Desktop/Backup/lib
cp /var/cache/apt/pkgcache.bin ~/Desktop/Backup/apt
cp /var/cache/apt/srcpkgcache.bin ~/Desktop/Backup/apt
chmod -R 777 ~/Desktop/Backup

elif [ $name = "2" ]
then
cp -r ~/Desktop/Backup/archives /var/cache/apt
cp -r ~/Desktop/Backup/etc /etc/apt
cp -r ~/Desktop/Backup/lib /var/lib/apt
cp ~/Desktop/Backup/apt/pkgcache.bin /var/cache/apt
cp ~/Desktop/Backup/apt/srcpkgcache.bin /var/cache/apt
else
        echo "I dont know this number"
fi
ctrl+c
moslem.b

 
نوشته: 362
پیوستن: چهار شنبه دی 4, 87 4:51 pm
شهر: اهواز
Given: 100 thanks
Received: 108 thanks

The following user would like to thank moslem.b for his or her post:
Ali_Gh

Re: آموزش همگام شل اسکریپت نویسی

نوشتهاز Ali_Gh » یک شنبه فروردین 8, 89 11:08 pm

خواهش می‌کنم، لطف داری مسلم جون؛
ناقلا اسکریپت جالبی بود، از اولین اسکریپتی که من نوشتم خیلی حرفه‌ای‌تر بوده!
اولین اسکریپت من، چند تا فایل‌ رو تغییر اسم می‌داد،‌ بدبختانه الان ندارمش! فکر کنم پاک شده :roll:
// یک سوال در موردش دارم، حتما باید با sudo اجرا بشه دیگه درسته؟
در مورد اون x- باید بگم، اون برای فعال کردن حالت رفع اشکال Debug اسکرپیت استفاده می‌شه و باعث می‌شه رفع اشکال کردن از اسکرپیت خیلی آسووونتر بشه!
مثلا خروجی اسکریپت زمان پردازش اسم من رو ببینین:
کد: گزینش همه
Please enter your first name:
+ read fname
Ali
++ echo Ali
++ wc --chars
+ fc=3
+ echo 'alright Ali, now enter your last name:'
alright Ali, now enter your last name:
+ read lname
Go
++ echo Go
++ wc --chars
+ lc=2
+ echo -e '\n--------------------------------------------------------------'

--------------------------------------------------------------
+ test 3 -lt 3 -o 2 -lt 3
+ echo -e '\nWARNING! the first or last name may not be accurate!'

WARNING! the first or last name may not be accurate!
+ echo -e 'Dear Ali Go, here'\''s our character counting result:\n'
Dear Ali Go, here's our character counting result:

+ echo 'Ali : 3'
Ali : 3
+ echo 'Go : 2'
Go : 2
+ echo -e '\nthank you for choosing our service!'

thank you for choosing our service!

قسمت‌هایی که علامت به علاوه دارند در واقع خطوط کد ما رو نشون می‌دن.
برای مثال خط مربوط به ساختار تصمیم if با نشان دادن مقادیر متغییر‌ها نحوه‌ی طی شدن روند برنامه رو به خوبی داره نشون می‌ده

راستی من هنوز نمی‌دونم، برای متصل کردن دو متغییر رشته‌ای باید از چه راهکاری استفاده کنم؟
مثلا فرض کنین
a="goo"
b="gle"
حالا برای به دست آوردن "google" چه عملوندی باید بین a$ و b$ بگذاریم؟
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 196 thanks

The following user would like to thank Ali_Gh for his or her post:
moslem.b

پیشپس

برگشت به برنامه نویسی

اکنون هست

;کسانی که اکنون در این تالار هستند: کاربری نام ننوشته است کاربر و 1 میهمان

cron