Giriş
bash içinde bazı değişkenler otomatik olarak tanımlı. Bu değişkenlere "built-in variables" deniyor.
bash içinde aynı zamanda bazı komutlar da otomatik olarak tanımlı. Bu komutlara "built-in commands" deniliyor.
Gömülü Değişkenler her zaman çift tırnak içinde kullanılmalı. Bazı örneklerde öyle gösterimese de bunu bir kural olarak benimsemek lazım. Şöyle yaparız.
Değişken listesi şöyle
bash içinde bazı değişkenler otomatik olarak tanımlı. Bu değişkenlere "built-in variables" deniyor.
bash içinde aynı zamanda bazı komutlar da otomatik olarak tanımlı. Bu komutlara "built-in commands" deniliyor.
Gömülü Değişkenler her zaman çift tırnak içinde kullanılmalı. Bazı örneklerde öyle gösterimese de bunu bir kural olarak benimsemek lazım. Şöyle yaparız.
$ echo 'echo "$1"' > injection.sh
$ bash injection.sh '/*'
/*
Değişken ListesiDeğişken listesi şöyle
Variable Meaning
$0 Filename of script
$1 Positional parameter #1
$2 - $9 Positional parameters #2 - #9
${10} Positional parameter #10
$# Number of positional parameters
"$*" All the positional parameters (as a single word) *
"$@" All the positional parameters (as separate strings)
${#*} Number of positional parameters
${#@} Number of positional parameters
$? Return value
$$ Process ID (PID) of script
$- Flags passed to script (using set)
$_ Last argument of previous command
$! Process ID (PID) of last job run in background
* Must be quoted, otherwise it defaults to $@.
Positional Parameter DeğişkenleriPositional Parameter için gömülü değişkenler yazısına taşıdım
Açıklaması şöyle.
"$@" değişkeni - tüm parametreleri array olarak temsil eder
$@ değişkeni yazısına taşıdım.
$# değişkeni - number of positional parameters
Açıklaması şöyle.
$! değişkeni yazısına taşıdım.
"$*" değişkeni - tüm parametreleri tek bir string olarak temsil eder
Special Parameters
The shell treats several parameters specially. These parameters may only
be referenced; assignment to them is not allowed.
* Expands to the positional parameters, starting from one. When the
expansion is not within double quotes, each positional parameter
expands to a separate word. In contexts where it is performed,
those words are subject to further word splitting and pathname
expansion. When the expansion occurs within double quotes, it
expands to a single word with the value of each parameter separated
by the first character of the IFS special variable. That is, "$*"
is equivalent to "$1c$2c...", where c is the first character of the
value of the IFS variable. If IFS is unset, the parameters are
separated by spaces. If IFS is null, the parameters are joined
without intervening separators.
Örnek ver"$@" değişkeni - tüm parametreleri array olarak temsil eder
$@ değişkeni yazısına taşıdım.
$# değişkeni - number of positional parameters
Açıklaması şöyle
Şöyle yaparız
Belli sayıda parametre bekliyorsak betiğin başında şöyle yaparız.
Burada dikkat edilmesi gereken nokta eğer $# gömülü değişkenini bir metod içinde kullanırsak metoda geçen parametre sayısını dönmesi. Şöyle yaparız. Sonuç olarak 3 alırız.
$? değişkeni yazısına taşıdım.
$# is a special variable in bash, that expands to the number of arguments (positional parameters) i.e. $1, $2 ... passed to the script in question or the shell in case of argument directly passed to the shell e.g. in bash -c '...' .....Örnek - betiğe geçen parametre sayısı
This is similar to argc in C.
Şöyle yaparız
$ bash -c 'echo $#'
0
$ bash -c 'echo $#' _ x
1
$ bash -c 'echo $#' _ x y
2
$ bash -c 'echo $#' _ x y z
3
Örnek - betiğe geçen parametre sayısıBelli sayıda parametre bekliyorsak betiğin başında şöyle yaparız.
if [[ $# -ne 1 ]]; then
echo 'One argument required for file name'
exit 1
fi
Örnek - metoda geçen parametre sayısıBurada dikkat edilmesi gereken nokta eğer $# gömülü değişkenini bir metod içinde kullanırsak metoda geçen parametre sayısını dönmesi. Şöyle yaparız. Sonuç olarak 3 alırız.
#!/bin/sh
f() {
echo "$#"
}
f a b c
Dolayısıyla şu kod betiğe geçen parametre sayısını kontrol etmek için uygun değil.#!/bin/sh
check_args() { # doesn't work!
if [ "$#" -ne 2 ]; then
printf '%s: error: need 2 arguments, got %d\n' "$0" "$#" >&2
exit 1
fi
}
# Maybe check some other things...
check_args
# Do other stuff...
Doğru kod şöyle#!/bin/sh
check_args() { # works -- the caller must pass the number of arguments received
if [ "$1" -ne 2 ]; then
printf '%s: error: need 2 arguments, got %d\n' "$0" "$1" >&2
exit 1
fi
}
# Maybe check some other things...
check_args "$#"
$? değişkeni$? değişkeni yazısına taşıdım.
$$ değişkeni - process id of script
$$ değişkeni yazısına taşıdım.
$- değişkeni
set built-in komutu tarafından atanan seçenekler erişmek için kullanılır
$$ değişkeni yazısına taşıdım.
$- değişkeni
set built-in komutu tarafından atanan seçenekler erişmek için kullanılır
Örnek
set -e yapılıp yapılmadığını anlamak için şöyle yaparız
set -e yapılıp yapılmadığını anlamak için şöyle yaparız
if [[ $- == *e* ]]
$_ değişkeniAçıklaması şöyle.
When Bash invokes an external command, the variable ‘$_’ is set to the full pathname of the command and passed to that command in its environment.$! değişkeni
$! değişkeni yazısına taşıdım.
Hiç yorum yok:
Yorum Gönder