代码之家  ›  专栏  ›  技术社区  ›  Dr. Debasish Jana

Linux测试文件时意外的运算符/操作数

  •  1
  • Dr. Debasish Jana  · 技术社区  · 7 年前

    我在Linux中使用了以下简单的ksh脚本

    #!/bin/ksh
    set -x
    ### Process list of *.dat files
    if [ -f *.dat ]
    then
    print "about to process"
    else
    print "no file to process"
    fi
    

    S3ASBN.1708140015551.dat S3ASBN.1708140015552.dat S3ASBN.1708140015561.dat S3HDR.dat 
    

    file *.dat
    S3ASBN.1708140015551.dat: ASCII text
    S3ASBN.1708140015552.dat: ASCII text
    S3ASBN.1708140015561.dat: ASCII text
    S3HDR.dat:                ASCII text
    

    但是,当我运行ksh脚本时,它显示以下内容:

     ./test
    + [ -f S3ASBN.1708140015551.dat S3ASBN.1708140015552.dat S3ASBN.1708140015561.dat S3HDR.dat ]
    ./test[9]: [: S3ASBN.1708140015552.dat: unexpected operator/operand
    + print  no file to process
     no file to process
    

    unexpected operator/operand 补救方法是什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   peyo    7 年前

    您的if语句不正确:您正在测试if*。dat是一个文件。
    问题是: *.dat * 这将创建每个项目的列表,并以 .dat .

    尝试添加循环:

    #! /usr/bin/ksh
    set -x
    ### Process list of *.dat files
    for file in *.dat
    do
      if [ -f $file ]
      then
        print "about to process"
      else
        print "no file to process"
      fi
    done
    

    就我而言:

    $> ls *.dat
    53.dat  fds.dat  ko.dat  tfd.dat
    

    $> ./tutu.sh 
    + [ -f 53.dat ]
    + print 'about to process'
    about to process
    + [ -f fds.dat ]
    + print 'about to process'
    about to process
    + [ -f ko.dat ]
    + print 'about to process'
    about to process
    + [ -f tfd.dat ]
    + print 'about to process'
    about to process