19 Mayıs 2019 Pazar

bash kodlama - if koşulu

Giriş
bash kodlarken if koşulu notlarım

Logical Kontroller
- String eşitlik için "==" kullanılır
- Sayısal Eşitlik için "eq" kullanılır
- Sayısal farklılık için "ne" kullanılır
- bash test yazısına bakabilirsiniz.

1. If koşulu tek satırsa fi'den önce ve sonra ; gelir
Örnek
Şu kod yanlış cünkü fi'den önce ; gelmiyor.
if [ -f ~/.bashrc ]; then   . ~/.bashrc fi
Şöyle yaparız
if [ -f ~/.bashrc ]; then   . ~/.bashrc; fi
Örnek
Şöyle yaparız.
function cgo() { if g++ -std=c++11 "$1" ; then ./a.out; fi; }
# ........................................................^
2 Test Koşulu

2.1 Çift Köşeli Parantez
If koşulunda çift köşeli parantez ile içerdeki değişkenler boşluk ile ayrılmalıdır.

Yanlış Kod
Şu kod yanlış çünkü [[ ile $x bitişik.
if [[$x = "foo"]]; then
Şu kod doğru çünkü [[ ile $x ayrık
if [[ $x = "foo" ]]; then
Örnek - eq koşulu
Şöyle yaparız.
i=4
if [[ $i -eq 4 ]] && false ; then
     echo this will not print
fi
if [[ $i -eq 4 ]] && true ; then
     echo this will print
fi
Örnek - == Koşulu
Şöyle yaparız
if [[ "$1" == "" ]]               # if parameter 1 is blank
then
    LOGFILE="/var/log/syslog"     # LOGFILE set to /var/log/syslog
else
    LOGFILE="$1"                  # LOGFILE set to parameter 1
fi
Bu kodun kısa halı şöyle.
LOGFILE=${1:-/var/log/syslog}
Örnek - == Koşulu
Şöyle yaparız. Burada txt uzantılı dosyalar üzerinde dolaşıp bunları tek bir dosyada birleştiriyoruz. Aralarına da \n ekliyoruz. Ancak çıktı dosya da newfile.txt olduğu için for döngüsünde bu dosyayı atlamak gerekiyor. Bu yüzden cat işlemi || (or) ile yapılıyor.
for f in *.txt; do 
    [[ "$f" = newfile.txt ]] || { cat -- "$f"; printf "\n"; }
done > newfile.txt
Eğer newfile.txt kontrolünü yapmazsak şu hatayı alırız. Yani çıktı olan dosyayı aynı anda okumaya da çalışıyoruz anlamına gelir.
cat: newfile.txt: input file is output file
Örnek - ne Koşulu
Şöyle yaparız
if [[ $EUID -ne 0 ]]; then
  echo "You must be root to run this script."
  exit
fi
2.2 Tek Köşeli Parantez
Örnek
Bash ile iki tane eşittir kullanılır. Şöyle yaparız.
if [ "$var" == "foo" ]; then  # bash
sh ile tek eşittir kullanılır. Şöyle yaparız.
if [ "$var" = "foo" ]; then   # sh
Örnek
Şöyle yaparız.
BCKGRND=yes
if [ "$BCKGRND" = "yes" ]; then
    sleep 5 &
else
    sleep 5
fi
Örnek
Şöyle yaparız. Burada "command substitution" yapılıyor. Sonra -n ile string'in boş olmadığı kontrol ediliyor.
if [ "$(id -u)" -eq 0 ]
then
    if [ -n "$SUDO_USER" ]
    then
        printf "This script has to run as root (not sudo)\n" >&2
        exit 1
    fi
    printf "OK, script run as root (not sudo)\n"
else
    printf "This script has to run as root\n" >&2
    exit 1
fi
3. && Kullanımı
Şöyle yaparız.
if [ "$i" -eq 4 ] && command1; then
   echo 'All is well'
else
   echo 'i is not 4, or command1 returned non-zero'
fi

Hiç yorum yok:

Yorum Gönder