2010-04-22 23 views
5

Paylaşılan bir web barındırıcısında zaman zaman öldürülen bir cron betiğim var. Bash içinde bir döngü yapmak isterdim ki, eğer öldürürse tekrar çalışır, çünkü çoğu zaman bunu yapar.boole türü?

#!/bin/bash 
VAR=0; 

while [ $VAR ]; do 
    if nice -19 mysqldump -uuser -ppassword -h database.hostname.com --skip-opt --all --complete-insert --add-drop-table database_name > ~/file/system/path/filename.sql; then 
     VAR=1; 
    fi 
done 

Yani senaryo tamam bir öldürülmüş süreç sonrasında toparlanma P ama düzgün çalışması oluyor kez yeni VAR değeri while döngü öldürmez: Ben bir boole değeri saklamak için sözdizimi ile sorun yaşıyorum.

Neyi yanlış yapıyorum?

cevap

5

onlar boş dizeleri olmadıklarından

while [ $VAR -eq 0 ]; do 

0 ve 1 hem gerçek olarak kabul edilir deneyin.

while ! mysqldump .....; do :;done 
+1

, aslında 1' '-ne olmalıdır:) – user151841

5

size gerek yok bir yardımcı değişken kullanmayı düşünün

#!/bin/bash 
VAR=1; 

while ((VAR)); do 
    if nice -19 mysqldump -uuser -ppassword -h database.hostname.com --skip-opt --all --complete-insert --add-drop-table database_name > ~/file/system/path/filename.sql; then 
     VAR=0; 
    fi 
done 
+0

Kolon ne yapmalı? – user151841

+2

İşlem yok: Sadece bash sözdizimini karşılamak için. –

1

Bash, bir sayısal şartlı çift parantez yerine bir dize koşullu kullanarak yapabiliriz, ama mantık ters çevrilir:

2

/bin/true ve /bin/false'u kullanabilirsiniz. Bu durumda while ! mysqldump .....; do :;done (Jürgen Hötzel'in çözümü) bu durumda daha iyi olsa da, true ve false kullanımında başka durumlar da vardır. Bunun için daha iyi 'kadar'

#!/bin/bash 
VAR=true 

while $VAR; do 
    if nice -19 mysqldump -uuser -ppassword -h database.hostname.com --skip-opt --all --complete-insert --add-drop-table database_name > ~/file/system/path/filename.sql; then 
    VAR=false 
    fi 
done 
+0

"mmmm. VAR =" true "ve var =' false 'olması gerekmiyordu? Çünkü - hata olmadıkça - VAR = true' true 'dizesini VAR'a atamak ve VAR = false demek VAR'a 'false' atamak. "... Ama Hayır, çünkü $ VAR $ VAR'ı yürütürken. –

0

Sevdiğim ...: Senaryomun yazdım nasıl doğru, ama

i=0 until [ $_done ]; do echo stuff...; sleep 1; ((i++)); if [ "$i" -gt 9 ]; then _done=1 fi done