شما هنوز به سیستم وارد نشده اید.
صفحات: 1
سلام دوستان.بنده در حال سرچ در مورد یک مطلبی بودم که با این اسکریپت مواجه شدم.
#!/bin/bash
# Call this script with at least 10 parameters, for example
# ./scriptname 1 2 3 4 5 6 7 8 9 10
MINPARAMS=10
echo
echo "The name of this script is \"$0\"."
# Adds ./ for current directory
echo "The name of this script is \"`basename $0`\"."
# Strips out path name info (see 'basename')
echo
if [ -n "$1" ] # Tested variable is quoted.
then
echo "Parameter #1 is $1" # Need quotes to escape #
fi
if [ -n "$2" ]
then
echo "Parameter #2 is $2"
fi
if [ -n "$3" ]
then
echo "Parameter #3 is $3"
fi
# ...
if [ -n "${10}" ] # Parameters > $9 must be enclosed in {brackets}.
then
echo "Parameter #10 is ${10}"
fi
echo "-----------------------------------"
echo "All the command-line parameters are: "$*""
if [ $# -lt "$MINPARAMS" ]
then
echo
echo "This script needs at least $MINPARAMS command-line arguments!"
fi
echo
exit 0
همه چیز مفهوم هست جز این قسمت:
echo "The name of this script is \"`basename $0`\"."
قسمت basename در اینجا دقیقا چه کاری انجام میده و کاراکترهای قبل و بعد اون چه کاراکترهایی هستن؟اگر در مورد همین قسمت مورد اشاره مقداری توضیح بدید ممنون میشم
پ.ن:متوجه تفاوت خروجی هستم اما متوجه نحوه عملکرد نیستم.
آخرین ویرایش توسط mr-noip (2018-12-21 02:05:34)
شروعی جدید
آفلاین
اگر یه جستجو میکردید و راهنمای bash رو یه نگاه می کردید خودتون میتونستید متوجه موضوع بشید.
\"`basename $0`\"
به ترتیب اگر شروع کنیم ابتدا دو تا کاراکتر "\ اول و آخر اومده یه escape sequence هست برای اینکه در خروجی کاراکتر " نمایش داده بشه.
بعد بین دو تا کاراکتر ` (backtick) عبارت basename $0 قرار گرفته. این باعث میشه که خروجی دستور بین دو تا backtick بعد از اجرا به عنوان متن استفاده بشه.
فرمانی که قرار هست اجرا بشه basename $0 است. دستور basename یکی از فرامین لینوکس هست که کارش اینه که آدرس دایرکتوری رو از نام یک فایل که به صورت متنی به عنوان پارامتر بهش داده میشه رو حذف میکنه و فقط نام خود فایل رو بر میگردونه بدون آدرس دایرکتوری. پارامتر 0$ هم نام فایلی که در حال حاضر در شل در حال اجرا هست رو بر میگردونه و basename $0 باعث میشه که نام فایل اسکریپت شما بدون بخش مربوط به دایرکتوری در خروجی قرار بگیره.
پس مثلا اگر شما این کد را داخل یه فایل به نام myscript.sh قرار داده باشید که این کد در آدرس زیر قرار گرفته باشه:
/home/morealaz/scripts/myscript.sh
بعد از اجرای این اسکریپت زمانی که به این خط میرسه:
echo "The name of this script is \"`basename $0`\"."
مقدار پارامتر 0$ به صورت زیر هست:
/home/morealaz/scripts/myscript.sh
و خروجی basename $0 برابر هست با myscript.sh که نام فایل بدون آدرس دایرکتوری های اون می باشد و در نهایت خروجی زیر در صفحه نمایش چاپ می شود:
The name of this script is "myscript.sh".
آفلاین
بعد بین دو تا کاراکتر ` (backtick) عبارت basename $0 قرار گرفته. این باعث میشه که خروجی دستور بین دو تا backtick بعد از اجرا به عنوان متن استفاده بشه.
متشکرم.بنده متاسفانه فقط همین قسمت
` basename $0 `
متوجه نشدم.
در واقع کاراکتر ` باعث میشه درون فرمان echo بتونیم از فرامین لینوکس استفاده کنیم و به عنوان رشته در خروجی چاپ نشه و فرمان مد نظر اجرا بشه؟
شروعی جدید
آفلاین
به نقل از (1)bash:
Command Substitution
Command substitution allows the output of a command to replace the com‐
mand name. There are two forms:
$(command)
or
`command`
Bash performs the expansion by executing command in a subshell environ‐
ment and replacing the command substitution with the standard output of
the command, with any trailing newlines deleted. Embedded newlines are
not deleted, but they may be removed during word splitting. The com‐
mand substitution $(cat file) can be replaced by the equivalent but
faster $(< file).
When the old-style backquote form of substitution is used, backslash
retains its literal meaning except when followed by $, `, or \. The
first backquote not preceded by a backslash terminates the command sub‐
stitution. When using the $(command) form, all characters between the
parentheses make up the command; none are treated specially.
Command substitutions may be nested. To nest when using the backquoted
form, escape the inner backquotes with backslashes.
If the substitution appears within double quotes, word splitting and
pathname expansion are not performed on the results.
آفلاین
صفحات: 1