echo "Hello World!"
echo "Salam be jahan!"
برای اجرا باید دستوری مثل sh test.sh بنویسیم#!/bin/sh
رو وارد کنیم و فایل رو با دستورchmod +x test.sh
به فایل اجرایی تبدیل کنیم بعد از اون میتونیم فایل رو مثل فایلهای اجرایی دیگه اجرا کنیم:./test.sh
echo \
"Salam"
if true
then
echo "Condition is true"
fi
if true; then echo "Condition is true"; fi
myname="Arman"
echo "My name is $myname"
read varname
if condition
then commands
[elif condition
then commands]
[else commands]
fi
به جای condition شرط را وارد میکنیم و جای commands دستورات رو. قسمتهای elif و else اختیاری هستندread name
if [ $name = "Arman" ]
then
echo "Your name is Arman"
elif [ $name = "Mehdi" ] # ;)
then
echo "Your name is Mehdi"
else
echo "I dont know you"
fi
پارامترهای مختلف testwhile condition
do commands
done
a=
while [ "$a" != "....." ]
do
a="$a."
echo x
sleep 1
done
a=
until [ "$a" = "....." ]
do
a="$a."
echo x
sleep 1
done
for name in list
do commands
done
for number in 1 2 3 4 5 6
do
echo -n "$number "
done
echo
for fn in *
do
echo $fn
done
for a in 0 1 2 3 4 5 6 7 8 9
do
for b in 0 1 2 3 4 5 6 7 8 9
do
echo "$a$b"
if [ "$a$b" = "72" ]
then
break 2
fi
done
done
case name in
match1) commands ;;
match2) commands ;;
esac
echo -n "Enter your command: "
read cmd
case $cmd in
listFiles)
ls
;;
showDirectory)
pwd
;;
calender)
date
echo
cal
;;
*)
echo "OOoops commands are: listFiles, showDirectory, calender"
;;
esac
یه سوال بعد اینا رو چجوری اجرا کنیم ؟؟؟ ??? :o
خیلی جالب بود . دستت درد نکنهحالا بذار تموم بشه
ویکی کنی بهتر میشه ها ;)
یه pdf راجع به shell scripting گشتم تو آرشیو pdf ای قدیمیم پیدا کردم.واسه شروع خوبه
امیدوارم به دردتون بخوره ...
command1 && command2
این دستور command1 را اجرا میکند و اگر خروجی صفر بود (درست) command2 اجرا میشود[ -f fileName ] && ./fileName
این قطعه کد (که خیلی استفاده میشه) یعنی اگر فایل fileName وجود داشت آنرا اجرا کن در غیر این صورت کاری انجام نمیدهدcmd 2>&1 >/dev/null
* /dev/null مثل یک سطل آشغال هست هرچی توش بریزین به هیچ جایی نمیرهls > temp
sort < temp
به جای استفاده از فایل واسطه میتوانیم مستقیما از خروجی یک دستور خوانده و به ورودی دیگری بدیم با یه پایپ (لوله)!ls | sort
FunctionName()
{
commands
.
.
.
return exitStatus
}
func param1 param2
و کد خروجی هم (از اونجایی که یه برنامه هست :D) توی متغییر ?$ ذخیره میشهarman:~$ ls /
bin cdrom etc initrd lib media opt root srv tmp var
boot dev home initrd.img lost+found mnt proc sbin sys usr vmlinuz
arman:~$ echo $?
0
arman:~$ ls /err
ls: /err: No such file or directory
arman:~$ echo $?
2
برای اینکه کد خروج کل shell script رو معین کنیم یا از کل برنامه خارج شویم از تابع exit استفاده میکنیمexit 2
test.sh:
#!/bin/sh
echo "0 = $0 1 = $1 2 = $2"
arman:~$ ./test.sh hello world
0 = ./test.sh 1 = hello 2 = world
test.sh:
#!/bin/sh
echo "0 = $0"
echo "# = $#"
echo "@ = $@"
for a in "$@"; do
echo $a
done
IFS="/"
echo "* = $*"
for a in "$*"; do
echo $a
done
echo "\$ = $$"
arman:~$ ./test.sh "hello world" hello2 world2
0 = ./test.sh
# = 3
@ = hello world hello2 world2
hello world
hello2
world2
* = hello world/hello2/world2
hello world hello2 world2
$ = 19750
wikied: http://wiki.ubuntu.ir/ShellScripting (http://wiki.ubuntu.ir/ShellScripting)
ولی کاملا چرک نویسه!
پ.ن. بابا پدرم در اومد چیکارش کنم که از چپ به راست بنویسه ???
دستشون درد نکنهwikied: http://wiki.ubuntu.ir/ShellScripting (http://wiki.ubuntu.ir/ShellScripting)
ولی کاملا چرک نویسه!
پ.ن. بابا پدرم در اومد چیکارش کنم که از چپ به راست بنویسه ???
sorena زحمتش رو کشید ;)
[[en]]
"Those who would give up Essential Liberty to purchase a little Temporary Safety deserve neither Liberty nor Safety"
http://en.wikipedia.org/wiki/Those_who_would_give_up_Essential_Liberty
[[fa]]
با این درست نشد!
قبلا امتحان کرده بودم مثلا قسمت Redirecting رو نگاه کنید من برای اولیش این ماکرو رو نوشتم ولی باز هم مثل بعدیها شده
مشکل مال من چی بود؟با این درست نشد!
قبلا امتحان کرده بودم مثلا قسمت Redirecting رو نگاه کنید من برای اولیش این ماکرو رو نوشتم ولی باز هم مثل بعدیها شده
من قسمت Redirecting رو درست کردم. فقط یه مشکلی داره. وقتی چپ به راست می کنمش میره میفته سمت چپ! مجبور شدم زیرشون خط بکشم که دیدنشون راحت بشه ;D
فقط یه سوال. چرا اینا رو به صورت کد ننوشتی؟ منظورم داخل }}}{{{ ؟
arman:~$ expr 4 + 6
10
arman:~$ expr 3 / 2
1
arman:~$ expr 9 - 5
4
arman:~$ expr 8 \* 3
24
همونطور که دیدن دو تا نکته هست:arman:~$ echo $((2+5*3-10/2))
12
arman:~$ echo $((2#100))
4
دستور دوم تبدیل مبنا هستشarman:~$ a=$(ls /) or a=`ls /`
arman:~$ echo $a
bin boot cdrom dev etc home initrd initrd.img lib lost+found media mnt opt proc root sbin srv sys tmp usr var vmlinuz
${parameter}
بنویسیم البته {} اختیاری هستند به جز وقتی که پارامترهای عددی بیشتر از یک رقمی داریم یا در بعد از پارامتر کاراکتری وجود دارد که ممکن است جز نام پارامترمحسوب شودarman:~$ a=Value
arman:~$ echo ${a:-PARAMETER IS NOT SET}
Value
arman:~$ echo ${b:-PARAMETER IS NOT SET}
PARAMETER IS NOT SET
arman:~$ echo ${test:?}
bash: test: parameter null or not set
arman:~$ echo ${test:?Please set test variable}
bash: test: Please set test variable
arman:~$ test='new value'
arman:~$ echo ${test:?Please set test variable}
new value
arman:~$ test=
arman:~$ echo ${test:-is null or not set}
is null or not set
arman:~$ echo ${test-is not set}
arman:~$ unset test
arman:~$ echo ${test:-is null or not set}
is null or not set
arman:~$ echo ${test-is not set}
is not set
arman:~$ a=000100
arman:~$ echo ${a#+(0)}
00100
arman:~$ echo ${a##+(0)}
100
arman:~$ echo ${a%+(0)}
00010
arman:~$ echo ${a%%+(0)}
0001
arman:~$ a=100
arman:~$ echo ${a##+(0)}
100
مشکل مال من چی بود؟با این درست نشد!
قبلا امتحان کرده بودم مثلا قسمت Redirecting رو نگاه کنید من برای اولیش این ماکرو رو نوشتم ولی باز هم مثل بعدیها شده
من قسمت Redirecting رو درست کردم. فقط یه مشکلی داره. وقتی چپ به راست می کنمش میره میفته سمت چپ! مجبور شدم زیرشون خط بکشم که دیدنشون راحت بشه ;D
فقط یه سوال. چرا اینا رو به صورت کد ننوشتی؟ منظورم داخل }}}{{{ ؟
براکت ها رو اشتباه زده بودم؟
کد ننوشتم چون کد نبودن :D
میخواستم حالت آیتمی داشته باشن نه مثل کد
${parameter:offset[:length]}
از رشتهی parameter یک زیر رشته از offset به طول length جدا میکند اگر length را وارد نکنید تا آخر رشته پیش میرودarman:~$ str="This is a sample string"
arman:~$ echo ${str:2+2}
is a sample string
arman:~$ echo ${str:0:3*3}
This is a
${!parameter}
به جای مقدار paramaeter مقدار متغییری که نامش برابر مقدار parameter هست را برمیگرداندarman:~$ fa="Salam"
arman:~$ en="Hello"
arman:~$ greet=en
arman:~$ echo ${!greet}
Hello
arman:~$ greet=fa
arman:~$ echo ${!greet}
Salam
${!param*}
${!param@}
نام تمام متغییرهایی که با param شروع میشوند را برمیگرداند و با اولین کاراکتر IFS جداسازی میکندarman:~$ a=value
arman:~$ ab=value
arman:~$ afhjd='value is not important'
arman:~$ ah=
arman:~$ echo ${!a*}
a ab afhjd ah
${!parameter[*]}
${!parameter[@]}
* براکتها اختیاری نیستند.arman:~$ arr=(9 8 7)
arman:~$ echo ${!arr[*]}
0 1 2
arman:~$ a='normal'
arman:~$ echo ${!a[*]}
0
arman:~$ echo ${!b[*]}
${parameter/pattern/replace}
اولین زیر رشتهای از parameter که با الگوی pattern مطابقت کند را با replace جایگزین میکند${parameter//pattern/replace}
تمام قسمتهایی از parameter که با الگوی pattern مطابقت کند را با replcae جایگزین میکند${parameter/#pattern/replace}
اگر ابتدای parameter با pattern مطابقت کند آن قسمت با replace عوض میشود${parameter/%pattern/replace}
اگر انتهای parameter با pattern مطابقت کند آن قسمت با replace عوض میشودarman:~$ a=salambehame
arman:~$ echo ${a/a/b}
sblambehame
arman:~$ echo ${a//a/b}
sblbmbehbme
arman:~$ echo ${a/#salam/hello}
hellobehame
arman:~$ echo ${a/%salam/hello}
salambehame
arman:~$ echo ${a/%be/hello}
salambehame
arman:~$ echo ${a/%hame/hello}
salambehello