行存在语法错误以及 KSH 脚本语法的参考列表无效

问题描述 投票:0回答:1

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

我想做的是从一个目录中添加一个文件附件,如果在那里找不到附件,则查看另一个目录并执行附件

如果有人可以帮助解决我面临的这个语法错误

unix ksh
1个回答
0
投票

当您将

then
do
if
for
抱在同一行时,您需要一个分号:

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
条件将检查文件的number

typeset -a files=( ~(N)"${CLAIM_FILE_PREFIX}"*$(date +"%Y%m%d")*.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

注释

© www.soinside.com 2019 - 2024. All rights reserved.