2017-03-02 68 views
0

我正在製作一個程序lab5,以測試參數是目錄還是文件。當我使用「bash lab5」運行該程序時,我得到了「第3行和第5行中預計的一元運算符」問題是什麼?謝謝!構建這個簡單的if else語句時,爲什麼會出現「Unary Operator Expected」錯誤?

#!/bin/bash 

if test "$1" -d 
then 
    echo "This is a directory" 
elif test "$1" -f 
then 
    echo "This is a file" 
else 
    echo "This is neither a file or a directory" 

網絡

+0

正確的語法是'if test -d'$ 1「'等''人測試'是你的朋友。 – codeforester

+0

謝謝!男子測試? – Ben

回答

0

test沒有後綴運算符,僅前綴和中綴運算符。 -f-d都是前綴運算符,這意味着它們在之前來到要測試的參數。

if test -d "$1" 
then 
    echo "This is a directory" 
elif test -f "$1" 
then 
    echo "This is a file" 
else 
    echo "This is neither a file or a directory" 
fi 

確切的錯誤發生的原因外殼看到類似test foo -d,並指出test收到正好兩個參數。有兩個參數,它的執行過程如下:

  1. 如果第一個參數是!,它只是檢查第二個參數是否爲空。
  2. 否則,第一個參數必須是是一元運算符,其中foo不是。
+0

哇。這就說得通了。因此,它的工作。謝謝! – Ben