1

我已经阅读了一个文件夹的内容并将它们存储在一个数组中。并且需要将此数组传递给脚本。如何存储和传递数组并读取该数组?

#!/usr/bin/ksh

cd /path/applications-war
arrayWar=( $(ls /path/applications-war))

我需要将此文件夹下的所有内容放入一个数组(@arrayWar)中。我将登录另一个框并调用脚本。我需要将此数组传递给脚本。

/usr/bin/ssh -t -t username@machinename /path/myscript.sh @arrayWar

myscript.sh中,我想将传递的数组 @arrayWar 与 ServicesArray 进行比较。

#!/bin/ksh
 @arrayWar = $1
 ServicesArray=('abc.war' 'xyz.war')
   for warfile in @arrayWar
     do
       if  echo "${ServicesArray[@]}" | fgrep  "$warfile"; then
            echo "$warfile matches"
       else
            echo "$warfile not matched" 
       fi
    done
4

2 回答 2

2

这是您的脚本,它以可变数量的文件作为参数:

#!/bin/ksh
ServicesArray=('abc.war' 'xyz.war')

for warfile in "${@##*/}"
  do
   if  echo "${ServicesArray[@]}" | fgrep  "$warfile"; then
        echo "$warfile matches"
   else
        echo "$warfile not matched" 
   fi
 done

你这样调用你的脚本(注意ls不推荐使用):

arrayWar=( /path/applications-war/* )
/usr/bin/ssh -t -t username@machinename /path/myscript.sh "@{arrayWar[@]}"

也可以不用arrayWar,直接传文件列表

/usr/bin/ssh -t -t username@machinename /path/myscript.sh /path/applications-war/*
于 2013-05-08T14:43:12.553 回答
0

正如 chepner 指出的那样,您不能传递数组,但是有几种方法可以解决这个问题。第一个是将它们作为一系列位置参数传递,我相信这些限制是 9。如果您在该数组中有超过 9 个项目,或者您想以更永久的方式执行此操作,您也可以用 BASH 写这个相当容易(我不熟悉 ksh,我做了一个快速的谷歌,语法看起来非常相似)。我将在这个例子中使用 ls 的输出

\#!/bin/bash


\# Lets say this gives it 'myFile' and 'testFile'
ls > myArrayFile

\# Need to change IFS to accurately split the list, this splits by newline
IFS=$’\x0a’

\# Set your array
compareArray=('myFile' 'testFile' 'someOtherStuff')

\# Standard loop to compare arrays

for genItem in `cat myArrayFile`;
do
    for staticItem in $compareArray;
    do
    if $genItem == $staticItem;
        then
        echo "$genItem is in the static array"
    fi
done
done
于 2013-05-08T15:39:46.040 回答