unix 行中有语法错误,KSH脚本语法的引用列表无效

7eumitmz  于 2023-10-18  发布在  Unix
关注(0)|答案(1)|浏览(176)

cd $file_dir
我试图做的是做一个附件的文件,从一个目录,如果附件没有找到,然后看看其他目录,并做附件

if [ -f "${CLAIM_FILE_PREFIX}"*$(date +"%Y%m%d")*.html ] then
  for FILE in ${CLAIM_FILE_PREFIX}*$(date +"%Y%m%d")*.html do
    ATTACHMENT_ARGS="$ATTACHMENT_ARGS $FILE"
    echo "$ATTACHMENT_ARGS"
  done
else
  cd $ARCHIVE_DIR
  for FILE in ${CLAIM_FILE_PREFIX}*.html do
   ATTACHMENT_ARGS="$ATTACHMENT_ARGS $FILE"
    echo "$ATTACHMENT_ARGS"
   done
fi

我试图做的是做一个附件的文件,从一个目录,如果附件没有找到,然后看看其他目录,并做附件
请如果有人可以帮助这个语法错误,我面临的

gz5pxeao

gz5pxeao1#

当你将thendoiffor放在同一条线上时,你需要一个扩展:

if ... ; then
   for x in y; do

此外,这是不正确的(超越上述):

if [ -f "${CLAIM_FILE_PREFIX}"*$(date +"%Y%m%d")*.html ] then

-f用于测试单个文件名,而不是文件名列表。
使用~(N)前缀创建一个文件数组,这样如果glob模式不匹配,数组就为空:

typeset -a files=( ~(N)"${CLAIM_FILE_PREFIX}"*$(date +"%Y%m%d")*.html )

然后,您的if条件将检查文件的数量

today=$(printf '%(%Y%m%d)T' now)
typeset -a files=( ~(N)"${CLAIM_FILE_PREFIX}"*"${today}"*.html )

if [ "${#files[@]}" -gt 0 ]; then
  for file in "${files[@]}"; do
    ATTACHMENT_ARGS+=" $file"
    echo "$ATTACHMENT_ARGS"
  done
else
  cd "$ARCHIVE_DIR"
  for file in ~(N)"${CLAIM_FILE_PREFIX}"*.html; do
   ATTACHMENT_ARGS+=" $file"
    echo "$ATTACHMENT_ARGS"
   done
fi

注意到

相关问题