2015-03-08 36 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