برگ 3 از 8

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

نوشتهنوشته شده: یک شنبه اسفند 16, 88 3:01 pm
از Ali_Gh
خب پیشنهاد من تا آخر ۵۵ هستش. می‌شه ۴۷ تا ۵۵. دلیلش اینه که از اونجا به بعد می‌رسیم به ساختار‌های تصمیم گیری.

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

نوشتهنوشته شده: سه شنبه اسفند 18, 88 9:31 pm
از moslem.b
این قسمت مطلب زیادی نداشت به نظر من تنها مطلب مهمش استفاده از & توی دستورات بود

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

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

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


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

توی تمرین‌ها شم خاموش کردن اسپیکر گزینه‌ی جالبی بود.
در بخش بعدی ۵۵ تا ۶۳ رو پیشنهاد می‌کنم

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

نوشتهنوشته شده: شنبه اسفند 21, 88 1:18 am
از Ali_Gh
خب من این قسمت رو دیدم، به نظر این بخش یکم نیازبه تمرین داره.
پیشنهاد می‌کنم چند اسکرپیت بنویسیم تا کاربرد این جداول صفحه ۶۲ حسابی دستمون بیاد و بتونیم باهاشون کنار بیایم و به قولی ملکه‌ی ذهنمون بشن
به محض اینکه اسکریپت‌هام حاضر شد اینجا می‌گذارمشون.
حالت آرمانی اینه که اسکرپیت‌ها حالت کاربردی داشته باشند - که البته من در این مورد هیچ قولی نمی‌دم ;) )

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

نوشتهنوشته شده: یک شنبه اسفند 23, 88 9:25 pm
از moslem.b
خوب رسیدیم به دستور مورد علاقه ی من یعنی همون if :D

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

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

نوشتهنوشته شده: چهار شنبه اسفند 26, 88 8:41 pm
از Ali_Gh
moslem.b نوشته است:خوب رسیدیم به دستور مورد علاقه ی من یعنی همون if :D

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


چی چی منتظر اسکریپت‌هات هستیم؟! دهنم گچی شده این ساختار ایف پدرم رو در آورد...
اصلا من گفتم «با هم»!
می‌خواین از زیرش در برین؟
اصلا خودتون هم باید اسکریپت بیارین ارائه بدین وگرنه جلوتر نمی ریم (مخصوصا تو مسلم) :twisted:

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

نوشتهنوشته شده: پنج شنبه فروردین 5, 89 2:37 pm
از Ali_Gh
خیلی خب مشخصه که من گرفتار درس‌هام هستم و همین باعث می‌شه دیر به دیر فرصت کنم بیام :?
ولی این دفعه خبرای خوبی دارم:
دو تا اسکریپت نوشتم با کمک ساختار تصمیم 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:

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

نوشتهنوشته شده: یک شنبه فروردین 7, 89 1:22 am
از Ali_Gh
وای خدای من این اسکریپت نویسی برای بَش عجب کار سخت و لذت بخشیه!
در مورد ساختار تصمیم مشکل داشتم که به یک حقیقت ناب نائل شدم..
من اگر کامروا گشتم و خوشدل چه عجب کاربری بودم و شل را به ذکاتم دادند
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:

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

نوشتهنوشته شده: یک شنبه فروردین 8, 89 11:00 pm
از moslem.b
ایول علی جون اسکریپت هات جالب بودن

در مورد فاصله ها بارها واسه خودم پیش اومده که مشکل ساز بودن ولی من دقیقا" متوجه نشدم این 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

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

نوشتهنوشته شده: یک شنبه فروردین 8, 89 11:08 pm
از Ali_Gh
خواهش می‌کنم، لطف داری مسلم جون؛
ناقلا اسکریپت جالبی بود، از اولین اسکریپتی که من نوشتم خیلی حرفه‌ای‌تر بوده!
اولین اسکریپت من، چند تا فایل‌ رو تغییر اسم می‌داد،‌ بدبختانه الان ندارمش! فکر کنم پاک شده :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$ بگذاریم؟