[英]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
每個值都有一個函數。 例如: Functionval1
, Functionval2
, Functionval3
...
現在,我需要一個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_run
和function_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.