2015-03-08 72 views
-3

我已閱讀我找到的所有手冊和示例。我已經在sh中嘗試過並且工作過。但我仍然無法找到如何使它在我的bash文件中工作。如果在bash中廢話比較總是返回true

我剛剛驗證碼:

echo "$#" 
if [ $# == 4 ]; then 
    #Some code 1º 
else 
    #Some code 2º 
fi 

(這只是最後一次嘗試我所做的,基於Testing the number of arguments

但我總是我1º代碼得到錯誤的,因爲比較總是返回。然後,我說好吧,讓我們嘗試的另一面:

echo "$#" 
if [ ! $# == 4 ]; then 
    #Some code 1º 
else 
    #Some code 2º 
fi 

就否定表達式的值,如果裏面,因爲它的手動我之前說的在完成了。沒有什麼,它仍然輸入1º代碼。

我不知道還有什麼我可以嘗試,試圖不已:

"$#" == "4" 
"$#" -eq "4" 
$# -gt 4 

而一些基於說明書我讀過。

任何人都可以解釋我做錯了什麼?

謝謝你這麼多

PS:反正有代碼:

#!/bin/bash 
function backup() 
{ 
    #Some code 


echo "$#" 

if [ $# -eq 4 ]; then 
    rootpath=${1} 
    uvus=${2} 
    title=${3} 
    file=${4} 

    path="${rootpath}$uvus/$title/VersionActual/" 
    pathbackups="${rootpath}$uvus/$title/VersionesAnteriores/" 
    filepath="${path}$file" 

    if [ -r $filepath ]; then 

    filesfound=(ls -1 $path | wc -l) 

    if [ "0" != $filesfound ] ; then 

     backup $pathbackups $file 

    fi 

    else 

    echo 'Error 2' 

    fi 

else 

    echo 'Error 1' 

fi 

所以這個代碼總是過得內如果再因爲我運行它不帶參數($# is 0)失敗。

如果我創建了一個分開的腳本:

#/bin/bash 
if [ $# -eq 4 ]; then 

    echo "4 parameters" 

fi 

它運行良好!

更新:加入PIC關於執行一些參數

Execution with some parameters

你可以看到,有appers和錯誤關於「如果」內部的線,因爲它在它進入,當它一定不。

+0

你的實際論點是什麼?你總是提供3個參數給你的腳本? – 2015-03-08 20:05:04

+0

我用3調用它,只是檢查一下,然後不執行代碼。 – 2015-03-08 20:10:38

+0

如果你總是使用3個參數,爲什麼你驚訝''[$#== 3]'是真的? – 2015-03-08 20:11:42

回答

1

你知道這個代碼是沒有意義的:

if [ $# == 0 ]; then 
    rootpath=${1} 
    uvus=${2} 
    title=${3} 
    file=${4} 

您只有在有零個參數進入該分支,然後嘗試給零個參數的變量,都將現在持有的空值。

你的測試應該是:if [ $# -eq 4 ]

此代碼

path=(rootpath . uvus . '/' . title . '/VersionActual/') 

創建具有9個元素,其中4是數組 「」 - 你想說

path="${rootpath}$uvus/$title/VersionActual/" 
+0

你說得對,我更新了這個問題。謝謝你的耐心。 – 2015-03-08 20:41:47

+1

@BtcSources不要以舊的答案不再有意義的方式來改變問題。 SO的存在是爲了創建一個問題和答案庫來幫助未來的程序員。如果問題在答案發布後重新編寫,則這不起作用。另外,如果格倫是對的,請給他加油。我已經做了。 – John1024 2015-03-08 20:52:13

+0

問題依然存在,問題依然存在。它總是在if裏面。 – 2015-03-08 20:58:13