Linux korn shell脚本失败

Linux korn shell脚本失败,linux,unix,sh,Linux,Unix,Sh,需要以下korn shell的帮助。语句if(${lista[expr$FNO+5]}==$MM))失败,出现语法错误。获取==的语法错误。试过-情商太多,但同样的问题 这将不返回任何内容:${lista[expr$FNO+5]}。 如何在这里获得月值 #!/bin/ksh # get a list of files and dates from ftp and remove files older than ndays ftpsite="xxx.com" ftpuser="ftpuser"

需要以下korn shell的帮助。语句
if(${lista[expr$FNO+5]}==$MM))失败,出现语法错误。获取==的语法错误。试过-情商太多,但同样的问题

这将不返回任何内容:
${lista[expr$FNO+5]}
。 如何在这里获得月值

#!/bin/ksh
# get a list of files and dates from ftp and remove files older than ndays

ftpsite="xxx.com"
ftpuser="ftpuser"
ftppass="ftppwd"
putdir="/ftpdir"

MM=`TZ=GMT+29 date +%b`
DD=`TZ=GMT+29 date +%d`

 echo removing files older than $MM $DD

 # get directory listing from remote source
 listing=`ftp -i -n $ftpsite <<EOMYF 
  user $ftpuser $ftppass
  binary
  cd $putdir
  ls -l
 quit
 EOMYF`


 lista=$listing


 # loop over our files
 FNO=0
 while (( $FNO < ${#lista[@]} )); do 

  # month (element 5), day (element 6) and filename (element 8)
  #echo Date ${lista[`expr $FNO+5`]} ${lista[`expr $FNO+6`]}          File: ${lista[`expr $FNO+8`]}

  # check the date stamp

  if (( "${lista[`expr $FNO + 5`]}" == $MM ));
  then
if (("${lista[`expr $FNO + 6`]}" -lt $DD ));
    then
     # Remove this file
  echo "Removing ${lista[`expr $FNO + 8`]}"
     echo "Removing ${lista[`expr $FNO + 8`]}" 

      ftp -i -n $ftpsite <<EOMYF2
      user $ftpuser $ftppass
      binary
      cd $putdir
     delete ${lista[`expr $FNO+8`]}
     quit
 EOMYF2

   fi
 fi
  (( FNO = $FNO + 9 ))
done
#/bin/ksh
#从ftp获取文件和日期列表,并删除早于星期五的文件
ftpsite=“xxx.com”
ftpuser=“ftpuser”
ftppass=“ftppwd”
putdir=“/ftpdir”
MM=`TZ=GMT+29日期+%b`
DD=`TZ=GMT+29日期+%d`
回显删除早于$MM$DD的文件
#从远程源获取目录列表

listing=`ftp-i-n$ftpsite当您赋值:
lista=$listing
时,它是一个简单的变量赋值

您想将
列表
作为数组分配给
lista
。其语法是:

set -A lista $listing
顺便说一句,我会使用
$()
而不是反勾号来调用命令,使用
$((数学))
而不是
expr math
,因为它们更流畅

正在尝试调试ftp文件列表:

ftpsite="xxx.com"
ftpuser="ftpuser"
ftppass="ftppwd"
putdir="/ftpdir"

ftp -i -n $ftpsite <<EOM
user $ftpuser $ftppass
binary
cd $putdir
ls -l *.txt
quit
EOM
ftpsite=“xxx.com”
ftpuser=“ftpuser”
ftppass=“ftppwd”
putdir=“/ftpdir”

ftp-i-n$ftpsite感谢您的回复。我更改了这个lista=($listing),但现在在第50行出现了0403-057语法错误:`('不是预期的。关闭here文档的行上的
EOMYF2
前是否有前导空格?如果有,请删除它-here文档代码在找到行开头的结束词时关闭。此外,小于测试需要取消引号,并使用
Using shellcheck.net修复了所有问题。但是,仍然需要这一行lista=($listing)出现错误,说明第0403-057行出现语法错误…:`('不是预期的。好的,您在AIX上?您可能需要显式执行
typeset-a lista=($listing)
在这种情况下-自动变量键入可能不会在这种情况下发生。尝试过typeset-a lista=($listing)还是有同样的错误。谢谢你帮我。
ftpsite="xxx.com"
ftpuser="ftpuser"
ftppass="ftppwd"
putdir="/ftpdir"

ftp -i -n $ftpsite <<EOM
user $ftpuser $ftppass
binary
cd $putdir
ls -l *.txt
quit
EOM