Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Shell脚本中的布尔表达式_Bash_Shell_Expression - Fatal编程技术网

Bash Shell脚本中的布尔表达式

Bash Shell脚本中的布尔表达式,bash,shell,expression,Bash,Shell,Expression,作为布尔表达式执行以下操作的“正确”方法是什么 for i in `ls $1/resources`; do if [ $i != "database.db" ] then if [ $i != "tiles" ] then if [ $i != "map.pdf" ] then if [ $i != "map.png" ] then

作为布尔表达式执行以下操作的“正确”方法是什么

for i in `ls $1/resources`; do
    if [ $i != "database.db" ]
    then
        if [ $i != "tiles" ]
        then
            if [ $i != "map.pdf" ]
            then
                if [ $i != "map.png" ]
                then
                    svn export -q $1/resources/$i ../MyProject/Resources/$i
...
甚至更短:

for i in `ls $1/resources`; do
  if [ $i != databse.db -a $i != titles -a $i != map.pdf ]; then
    svn export -q $1/resources/$i ../MyProject/Resources/$i
  fi
done;

if表达式中的
-a
相当于布尔测试和壳内测试。有关更多信息,请参见《人员测试》

其他解决方案有几个常见错误:

  • 对于以美元表示的i(ls…)
    是多余的/有问题的 只需做:
    为i$1/资源*;执行…

  • [$i!=file1-a$1!=file2]
    这实际上有两个问题

    a。
    $i
    未被引用,因此带有空格的名称将导致问题

    b
    -a
    如果
    stat
    ing文件,则效率低下,因为它不会短路(我知道上面的不是
    stat
    ing文件)

  • 因此,请尝试:

    用于i,单位为$1/资源/*;做
    如果[“$i”!=“database.db”]&&
    [“$i”!=“瓷砖”]&&
    [“$i”!=“map.pdf”]&&
    [“$i”!=“map.png”];然后
    svn导出-q“$i”“../MyProject/Resources/$(basename$i)”
    fi
    完成
    
    考虑使用案例语句:

    for i in $(ls $1/resources); do
        case $i in
            database.db|tiles|map.pdf|map.png)
               ;;
            *)
               svn export -q $1/resources/$i ../MyProject/Resources/$i;;
        esac
    done
    

    为了将来的参考,最好使用新的[[测试操作符。接受的答案很接近,提及的所有内容都适用,但该答案需要大量引用和调用多个测试

    首选方法如下:

    for i in $1/resources/*; do
        if [[ $i != "database.db" && $i != "tiles" &&
                    $i != "map.pdf" && $i != "map.png" ]]; then
            svn export -q "$i" "../MyProject/Resources/$(basename $i)"
        fi
    done
    
    for i in $1/resources/*; do
        if [[ $i != "database.db" && $i != "tiles" &&
                    $i != "map.pdf" && $i != "map.png" ]]; then
            svn export -q "$i" "../MyProject/Resources/$(basename $i)"
        fi
    done