29 Eylül 2015 Salı

bash if koşulu

Çift Köşeli Parantez
if koşulları çift köşeli parantez ile yazılabilir. Köşeli parantezden sonra noktalı virgül konulur.
if [[ $ans1_1 = y ]]; then
    fedoraDeps
elif [[ $ans1_1 = n ]]; then
    :
else
    echo "Answer 'y' or 'n'"
fi
Tek Köşeli Parantez - test komutuna denk gelir
Tek köşeli parantez ile de yazılabilir. Bu durumda "[" test komutuna denk gelir.
if [ -f "log/server.log" ] ; then echo "log started" ; fi
Bu kullanım şeklinde "[" karakterinden sonra ve "]" karakterinden önce en az bir boşluk olmalıdır. Yani şöyle olmalı if boşluk [ boşluk ... boşluk ]. Sebebi ise şu
A bit of history: this is because '[' was historically not a shell-built-in but a separate executable that received the expresson as arguments and returned a result. If you didn't surround the '[' with space, the shell would be searching $PATH for a different filename (and not find it) . 
Şu örnek yanlıştır. Boşluk olmadığı için [test: command not found hatası alırız.
#!/bin/bash

result="test"
if [$result = "test"];
then printf "ok"
fi
Doğrusu şöyle olmalı.
#!/bin/bash

result="test"
if [ "$result" = "test" ]; then
  printf "ok"
fi
Not: test komutunda karşılaştırılan tipler aynı olmalı yani string ile string karşılaştırılabilir. Bir değişkeni string haline getirmek için çift tırnak içine alabiliriz.
if [ "$result" != "job completed" ] ...

Köşeli Parantez Olmadan
Köşeli parantez olmadan da yazılabilir.
if is_log_started; then
    echo "log started"
fi

If İçinde Metod Çağırma
Metodlar sadece 0-255 arasında bir rakam dönebilir.
function is_log_started()
{
  if test -f "log/server.log"; then
    return 0
  fi
    return 1
}
Çoğu zaman metod içindeki en son çalıştırılan komutu dönmek yeterli oluyor.
function is_log_started
{
  test -f "log/server.log"
}
Bu metod şöyle kullanılır
if is_log_started; then
    echo "log started"
fi






Hiç yorum yok:

Yorum Gönder