我的 bash 脚本找不到现有文件

我的 bash 脚本找不到现有文件

我实现了一个 bash 脚本,该脚本对位​​于脚本同一工作目录中的现有文本文件进行操作。该脚本通过函数参数获取文件的名称进行计算。

问题是,当我运行脚本时,它找不到文件。我已经检查了调用函数时的位置参数,并且文件的名称是正确的。但检查文件名“[-e filename]”或在其上启动的命令(例如 cat filename)返回错误。未找到文件名。

我粘贴我的脚本..

#!/bin/bash

query=
loan=

function count(){
  local valore=0
  local wordcmp
  TMPFILE=$(mktemp)

  if [ -n "$query" ]; then
    wordcmp=$query
  else wordcmp=$loan
  fi

  echo $1 (here print the correct file name passed by the caller)
  for FILE; do
    if [ -e $FILE ]; then
      cat $FILE | grep $wordcmp > $TMPFILE
      exec 3< $TMPFILE
  while read -u 3 line; do
    valore=$(($valore + ${line#$wordcmp}))
  done
      exec 3>&-
      echo "$wordcmp $valore"
      echo "Bye."
    else
      echo "$0: error --- log file $FILE not found" 1>&2
   fi
   valore=0
  done
}

set -- `getopt -o "h" -l "query,loan" -- "$@"`

while true; do

   case "$1" in

         --query) query=QUERY
              shift;;

         --loan) loan=LOAN
             shift;;

         -h) echo "$0: help" 1>&2
         echo "usage: $0 --query logfile for query summary" 1>&2
             echo "usage: $0 --loan logfile for loan summary" 1>&2
             echo "usage: $0 -h for this help message" 1>&2
         exit 1;;
         --) shift
break;;
 esac
done

if [ -z "$query" -a -z "$loan" ]; then
  echo "$0: you must specify at least one option and log file(s)" 1>&2
  echo "please type $0 -h for help" 1>&2
  exit 1
fi

if [ $# = 0 ]; then
  echo "$0: you must specify at least one log file" 1>&2
  echo "please type $0 -h for help" 1>&2
  exit 1
  shift
fi
 count $@

调用 myscript --query filename.log 时的输出是

“./myscript.sh:错误--未找到日志文件‘filename.log’”

(但脚本启动时文件“filename.log”存在于本地目录中)

任何想法?

谢谢大家

答案1

您说它给出的错误(“./myscript.sh:错误 --- 未找到日志文件‘filename.log’”)在文件名周围有单引号,但打印它的命令(echo "$0: error --- log file $FILE not found" 1>&2)没有将它们放在那里。这对我来说意味着它们是 $FILE 值的一部分,这意味着它正在将它们作为实际文件名称的一部分进行查找。

如果我说得没错,问题不在于脚本,而在于调用它的方式。那么,你是如何调用这个脚本的呢?如果是这样的:

cmd="./myscript.sh --loan 'filename.log'"
$cmd

...那么这就是问题所在,因为在 bash 中引用不起作用;参见BashFAQ #050:我试图将命令放入变量中,但复杂的情况总是失败

相关内容