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

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

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

نوشتهاز Ali_Gh » دو شنبه فروردین 9, 89 11:07 pm

مسلم جان، تو پست قبلی یک سوال در مورد اسکریپتت پرسیدم، فرصت کردی جوابش رو بنویس واسم.. مرسی

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

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

نوشتهاز moslem.b » یک شنبه فروردین 15, 89 3:02 pm

علی جون واقعا شرمنده من این روزا خیلی سرم شلوغه

در مورد اون مبحثی که گفتی نمیدونم باید بگردم
ctrl+c
moslem.b

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

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

نوشتهاز NabiKAZ » پنج شنبه فروردین 19, 89 11:41 pm

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


گفتی test یاد این دستور در جاوا اسکریپت افتادم:
http://www.w3schools.com/jsref/jsref_regexp_test.asp
شاید بی ربطه ولی جالب و پرکاربرده.
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

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

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

نوشتهاز NabiKAZ » پنج شنبه فروردین 19, 89 11:46 pm

Ali_Gh نوشته است:راستی من هنوز نمی‌دونم، برای متصل کردن دو متغییر رشته‌ای باید از چه راهکاری استفاده کنم؟
مثلا فرض کنین
a="goo"
b="gle"
حالا برای به دست آوردن "google" چه عملوندی باید بین a$ و b$ بگذاریم؟


وا! خودت که جواب خودت رو همون بالا دادی!
یادت نیست گفتی هیچی نمیخواد بینشون گذاشت...
کد: گزینش همه
nabi@nabi-desktop:~$ a=goo;b=gle;echo $a$b
google

فکر کنم خواستی مچ بگیری ببینی کسی این همه مینویسی رو میخونه ;)
دیدی من خوندم :D
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

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

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

نوشتهاز NabiKAZ » پنج شنبه فروردین 19, 89 11:47 pm

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

کد: گزینش همه
#!/bin/bash

echo Select one about LAMP:
echo 1. Start
echo 2. Stop
echo 3. Restart

read a

if [ "$a" = "1" ]
then
   /opt/lampp/lampp start
   exit
fi

if [ "$a" = "2" ]
then
   /opt/lampp/lampp stop
   exit
fi

if [ "$a" = "3" ]
then
   /opt/lampp/lampp restart
   exit
fi
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

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

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

نوشتهاز moslem.b » سه شنبه فروردین 24, 89 5:20 pm

یه سوال

اگه ما بخوایم یه قطعه کد جاوا یا php به اسکریپتمون اضافه کنیم باید چکار کنیم ؟
ctrl+c
moslem.b

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

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

نوشتهاز Ali_Gh » چهار شنبه فروردین 25, 89 1:34 pm

NabiKAZ نوشته است:وا! خودت که جواب خودت رو همون بالا دادی!
یادت نیست گفتی هیچی نمیخواد بینشون گذاشت...
کد: گزینش همه
nabi@nabi-desktop:~$ a=goo;b=gle;echo $a$b
google

فکر کنم خواستی مچ بگیری ببینی کسی این همه مینویسی رو میخونه ;)
دیدی من خوندم :D


باریک‌ الله! نه معلومه حواست جمعه
;)

NabiKAZ نوشته است:اینم اولین شل اسکریپت من، که یک شاهکار در نوع خودش محسوب میشه :D
....


مرسی اعتماد به نفس!! :D خب اسکریپت ساده و خوبی هم نوشتی. خوبیش اینه که هنوز می‌شه توسعه اش داد. مثلا اینکه رمز کاربر ریشه رو بگیره و کاربر مجبور نباشه قبل از اجراش
sudo
بزنه

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

The following user would like to thank Ali_Gh for his or her post:
NabiKAZ

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

نوشتهاز NabiKAZ » چهار شنبه فروردین 25, 89 2:01 pm

moslem.b نوشته است:یه سوال

اگه ما بخوایم یه قطعه کد جاوا یا php به اسکریپتمون اضافه کنیم باید چکار کنیم ؟



میشه از PHP CLI استفاده کرد.


PHP در BASH

کد: گزینش همه
#!/bin/bash

echo It is a bash code

php -r 'echo "It is a PHP code\n";'



BASH در PHP

کد: گزینش همه
<?php
$output = shell_exec('ls -lart');
echo $output;
?>


اگه ترکیب های پیچیده تر برای PHP خواستید این میتونه یه نمونه باشه:

کد: گزینش همه
nabi@nabi-desktop:~$ php -r 'for ($i=1; $i<=5; $i++) { $a[] = $i; }; print_r($a);'
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

The following user would like to thank NabiKAZ for his or her post:
Ali_Gh

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

نوشتهاز Ali_Gh » چهار شنبه فروردین 25, 89 5:42 pm

احسنت نبی جان! مرسی از این پست مفید
منم با اجازه نبی و سایر اساتید یکم جسارت می‌کنم و اسکریپت‌هایی که در این زمینه تو همین دو سه ساعته نوشتم می‌گذارم.

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

برای این موضوع کافیه فایل‌ پی اچ پی نوشته شده رو تو یک فایل ساده‌ی متنی گذاشته بشه و خط اولش درج بشه
کد: گزینش همه
#!/usr/bin/php

که البته بعد از علامت تعجب مسیر مربوط به فایل پی اچ پی هستش که ممکنه توی سیستم‌های مختلف فرق کنه.
به نظرم این قضیه سوژه‌ی خوبی واسه شل اسکریپت بود به همین دلیل برای این سناریو دو تا اسکریپت نوشتم که برای یک هدف که همون «ایجاد یک اسکریپت پی اچ پی برای اجرا در شل» هستش استفاده می‌شن.
اسکریپت مدیریتی این جوریه
کد: گزینش همه
#!/bin/bash
#
# BashMyAdmin
# Main Script for generating php script for bash
#
# @author: Ali Ghanavatian
# @licensed under terms of GNU/GPL v.3
#
defaultPath="/usr/bin/php"
echo "please enter [php] path to continue"
echo "hint: default is: $defaultPath"
read ppath
./phpfileCreator.bash $ppath

if [ 0 -ne `echo $?` ]; then # failed, tring to test with default path
echo "php was not found on $ppath..."
echo "tring with default path"

ppath=$defaultPath
./phpfileCreator.bash $ppath

   if [ 0 -ne `echo $?` ]; then # no php found!
   echo "failed to locating php, bashMyAdmin will exit now"
   exit 1
   fi
fi
echo "the $ppath recognized as php"
echo "OK with PHP, now enter path of php file"

read phpSrcPath
echo "enter a name for your php script file"

read phpFileName
./phpfileCreator.bash $ppath $phpSrcPath $phpFileName
echo "done with generating <$phpFileName> "
echo "would you like to run the generated file? [y]es"
read ans
if [ $ans = "y" -o $ans = "Y" ]; then
echo "========================================================"
./$phpFileName
fi
echo -e "\n========================================================"
echo "done."


که باید در کنار این اسکریپت قرار داده بشه
کد: گزینش همه
#!/bin/bash
# php script creator module
# * compiler detector
# * script generator
#
# @author: Ali Ghanavatian
# @licensed under terms of GNU/GPL v.3
#
#
if [ $# -eq 0 -o $# -gt 3 ]; then
echo "bad usage! check parameters"
exit 1
fi
echo "#!$1" > tmp.php
if [ $# -eq 3 ]; then
cat $2 >> tmp.php
mv ./tmp.php $3
chmod +x $3
exit 0
fi
echo "<?php" >> tmp.php
echo "echo \"php in $ppath works\"; " >> tmp.php
echo "?>" >> tmp.php
chmod +x ./tmp.php
./tmp.php
okPath=`echo $?`
rm ./tmp.php
if [ $okPath -ne 0 ]; then
exit 1
fi
exit 0


خب یکم توضیحات بدم، اولش اینکه اسکریپت اول محل php رو می‌پرسه. بعدش تست می‌کنه که اون مسیر معتبره یا نه/ اگه نبود که خطا می‌ده و مسیر پیش‌فرض usr/bin/php/ رو تست می‌کنه، اگه اینم کار نداد خاتمه پیدا می‌کنه. ولی اگه درست باشه، مسیر فایل پی اچ پی که قراره تبدیل به اسکریپت پی اچ پی بشه رو می‌گیره به علاوه اسم اسکریپت. بعدش اون اسکریپت رو تولید می‌کنه و از کاربر می‌پرسه که دوست داره پی اچ پی اسکریپتش توی شل اجرا بشه یا نه

خب به نظر خودم که قسمت قشنگش تست قابل اجرا بودن پی اچ پی بوده، که اینکار رو با ساختن یک اسکریپت ساده‌ی temp.php انجام می‌ده، برای تست صحت اجراش هم بعد از اجرای این اسکریپت از دستور فوق العاده
کد: گزینش همه
echo $?

استفاده می‌کنه که یک مقدار عددی برمی‌گردونه (اگه پی اچ پی پیدا بشه و صحیح کار کنه مقدار صفر و گرنه یک عدد دیگه)

برای سایر عزیزانی که میان اینجا و فقط تماشا می‌کنن، یک فایل نمونه پی اچ پی می‌گذارم که بتونن با این دو تا اسکریپت تست کنن
کد: گزینش همه
<?php
echo "Hello World!"
?>


اووپس یادم رفته بود؛ این لینکی بود که ایده‌ی این سناریو رو در واقع اونجا پیدا کردم
http://www.myokyawhtun.com/tips-tricks/how-to-run-php-script-in-shell.html
گروه کاربران ایرانی اینک اسکیپ
http://inkscape-ir.org
آکلینوکس
http://aqlinux.ir
Ali_Gh
مسئول جلسات
 
نوشته: 443
پیوستن: شنبه دی 7, 87 11:00 am
شهر: اهواز
Given: 58 thanks
Received: 197 thanks

The following user would like to thank Ali_Gh for his or her post:
NabiKAZ

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

نوشتهاز NabiKAZ » یک شنبه اردیبهشت 5, 89 7:44 am

Ali_Gh نوشته است::
به نظرم این قضیه سوژه‌ی خوبی واسه شل اسکریپت بود به همین دلیل برای این سناریو دو تا اسکریپت نوشتم که برای یک هدف که همون «ایجاد یک اسکریپت پی اچ پی برای اجرا در شل» هستش استفاده می‌شن.
:



سلام آقا علی،


(1)
من کدت رو امتحان کردم و خیلی خوب کار کرد، این هم خروجی:
کد: گزینش همه
root@server [/test/test_ali]# ll
total 24
drwxr-xr-x  2 root root 4096 Apr 25 03:08 ./
d--------- 54 root root 4096 Apr 25 02:36 ../
-rwxrwxrwx  1 root root 1141 Apr 25 02:37 bashMyAdmin.bash*
-rwxrwxrwx  1 root root  532 Apr 25 02:38 phpfileCreator.bash*
-rw-r--r--  1 root root   30 Apr 25 02:39 test.php
root@server [/test/test_ali]# ./bashMyAdmin.bash
please enter [php] path to continue
hint: default is: /usr/bin/php

bad usage! check parameters
php was not found on ...
tring with default path
X-Powered-By: PHP/5.2.11
Content-type: text/html

php in  worksthe /usr/bin/php recognized as php
OK with PHP, now enter path of php file
test.php
enter a name for your php script file
test2.php
done with generating <test2.php>
would you like to run the generated file? [y]es
y
========================================================
X-Powered-By: PHP/5.2.11
Content-type: text/html

Hello World!

========================================================
done.



(2)
فایل دوم الزاماً بایستی اسمش phpfileCreator.bash میبود که اشاره نکردی و من از روی سورس متوجه شدم.


(3)
شاید بهتر می بود هر دو اسکریپت رو یکی میکردی. اما همینجوری هم باعث شد نکات خوبی درمورد اجرای فایل با پارامتر آشکار بشه! که من هم نمیدونستم و البته وقتی سرچ کردم به این کد جالب در این مورد رسیدم که گویاست:
کد: گزینش همه
#!/bin/bash
# Its a test script : test.sh
echo "First Parameter : \$1 = $1"
echo "Second parameter : \$2 = $2"
echo "Total passed parameters : \$# = $#"
echo "All parameters : \$* = $*"
echo "Process Id  : \$$ = $$"
exit 0

Output:

root@server [/test/test_ali]# ./test.sh a b c
First Parameter : $1 = a
Second parameter : $2 = b
Total passed parameters : $# = 3
All parameters : $* = a b c
Process Id  : $$ = 25522



(4)
این دستور شگفت انگیز:
کد: گزینش همه
echo $?

که بهش اشاره کردی. من امتحان کردم همیشه مقدار صفر رو برمیگردونه. ممکنه کمی درموردش توضیح بدی؟


(5)
یک نکته مهم اینکه، فایلی که به روش شما اجرا میشه یک هدر به صورت زیر به خروجی ارسال میکنه:
کد: گزینش همه
X-Powered-By: PHP/5.2.11
Content-type: text/html


که اصلاً لازم نیست و برای ظاهر نشدن اون، خط اول رو بایستی با سوئیچ q- بدین صورت نوشت:
کد: گزینش همه
#!/usr/bin/php -q



(6)
خب میتونستی از خروجی دستور:
کد: گزینش همه
which php

برای پیدا کردن مسیر نصب php استفاده کنی و اون رو به ابتدای فایل اضافه کنی، تا دیگه لازم نباشه مقدار اون رو به صورت دستی از کاربر بگیری.


(7)
یکجا اینجوری نوشته میشه: php in worksthe که خروجی اون فایل تست، به ابتدای خروجی دوم میچسبه. حتماً لازم نیست که بگم در php در دستور echo ، آخرش بهتره یه n\ بزاری که این مشکل رخ نده.


(8)
ضمناً فایل php رو در ترمینال اینجوری هم میشه اجرا کرد:
کد: گزینش همه
php -f test.php



اسکریپت شما نکات آموزنده خوبی داشت؛ دستت درد نکنه.


تشکر
نبی
NabiKAZ
مسئول وب‌سایت
 
نوشته: 166
پیوستن: شنبه دی 7, 87 8:26 am
شهر: اهواز
Given: 114 thanks
Received: 84 thanks

پیشپس

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

اکنون هست

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

cron