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 に詳しくありません。Google で簡単に検索したところ、構文はかなり似ているように見えます)。この例では 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 に答える