簡體   English   中英

Shell腳本讀取數組並將數組值解析為函數

[英]shell script read arrays and parse the array value to a function

我有2個數組,如下所示:

Array1 -  ( val1 val2 val3 val4 val5 )
Array2 -  ( user1 user2 user3 user4 user5 )

我對array1每個值都有一個函數。 例如: Functionval1Functionval2Functionval3 ...

現在,我需要一個shell腳本,它將讀取array1並調用相應的函數,並將Array2的相應值傳遞給該函數。

例如:從Array1讀取val1 ,對於val1調用Functionval1並將user1傳遞給該函數。

您能幫我建立邏輯嗎?

親愛的,西瓦。

您可以遍歷數組索引並分別調用每個函數及其參數。

Array1=( val1 val2 val3 val4 val5 )
Array2=( user1 user2 user3 user4 user5 )

for i in ${!Array1[@]}; do
    "Function${Array1[$i]}" "${Array2[$i]}"
done

考慮這樣的測試腳本:

#!/bin/ksh
Functionval1 (){
    echo "this is a test $1"
}
Functionval2 (){
    echo "this is another test $1"
}

Array1=( val1 val2 )
Array2=( user1 user2 )
for i in ${!Array1[@]}; do
    "Function${Array1[$i]}" "${Array2[$i]}"
done

輸出:

this is a test user1
this is another test user2

您也可以重寫腳本以執行相同的操作,而無需使用${!...[@]}語法。

Array1=(val1 val2)
Array2=(user1 user2)
arr_len=${#Array1[@]}
let arr_len--
for i in $(seq 0 $arr_len); do
    "Function${Array1[$i]}" "${Array2[$i]}"
done

請注意,您必須針對像zsh這樣的將其第一個數組元素初始化為index 1外殼進行調整。

#!/bin/bash

# functions defined here, e.g Functionval1 etc.

#....

# Array declarations

declare -a Array1=( val1 val2 val3 val4 val5 )
declare -a Array2=( user1 user2 user3 user4 user5 )

# get length of Array1
array1length=${#Array1[@]}

for (( i=0; i<${#Array1[@]}; i++ ));
do
   function_to_run="Function${Array1[$i]}" # E.g. function_to_run becomes Functionval1
   function_parameter=${Array2[$i]} # E.g. function_parameter becomes user1
   $function_to_run $function_parameter # E.g. Functionval1 user1
done

您可以在不聲明function_to_runfunction_parameter情況下完成此操作,但是使用它們時會更容易理解。

Korn Shell版本:

#!/bin/ksh

# functions defined here, e.g Functionval1 etc.

set -A Array1 val1 val2 val3 val4 val5
set -A Array2 user1 user2 user3 user4 user5

# get length of Array1
Array1length=${#Array1[@]}

i=0
while (( $i < $Array1length ))
do
   function_to_run="Function${Array1[$i]}"
   function_parameter=${Array2[$i]}
   $function_to_run $function_parameter
   i=$i+1
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM