2010-02-22 14 views
7

içinde birden fazla Tekli operatörler If deyimleri birden çok tekil operatörlere sahip olabilirsiniz .. İşte bana hata veren kod parçacığı.bash: If ifadesi

Lütfen kodu buradan düzeltin.

if [ -f $input_file ] -a [ -f $output_file ] -a [ -f $log_file ] ] 
then 
### Some Code here 
fi 

Teşekkür Kiran

cevap

10
if [ -f "file1" -a -f "file2" -a "file3" ]; then 
    #some code 
fi 
+0

Bir sihir gibi çalışır .. Hızlı yanıt için teşekkürler .. – Kiran

1

[ bir komut, if ifadenin bir parçası değildir. Bu nedenle, onu olduğu gibi yanlış çalıştırmak yerine, uygun argümanların her birini iletmelisiniz.

if [ arg1 arg2 arg3 arg4 ... ] 
then 
+0

Cygwin ortamlarında C: \ cygwin \ bin \\ [. Exe. Bu klasöre ilk defa bakmak için gerçekten garip bir his. – Boldewyn

+0

Benzer komut '' '' '' '' ''/'' ''/'' ''/'' '' '' '' '' '' '' '' '' '' genellikle bir bash yerleşkedir. –

4

Yalnızca test ... için kısayol olarak [ ... ] operatörü görebilirsiniz. Seçenekler aynı şekilde kullanılır.

Yani durumda ghostdog74 yolunu yazmak veya verebilir ya: Eğer Bash'in çift braket kullanırsanız

if [ -f $input_file ] && [ -f $output_file ] && [ -f $log_file ] 
then 
### Some Code here 
fi 
5

, bunu yapabilirsiniz:

if [[ -f "$input_file" && -f "$output_file" && -f "$log_file" ]] 

Ben temizleyici bulmak hangi Burada gösterilen diğer seçeneklerden daha okumak için (ama bu öznel). Bununla birlikte, other advantages vardır.

Ayrıca, ghostdog74 gösterdiği gibi, her zaman dosya adlarını içeren değişkenleri belirtmelisiniz.

+0

BASH çift-parantez ile WordSplitting yapmıyor, çünkü çift-parantez kullanıyorsanız dosya adları içeren değişkenleri alıntılamak gerekli değildir. Http://mywiki.wooledge.org/BashFAQ/031 adresine bakın. – Cliff