Não se sabe se "CallScript" que chama "MainScript" é necessário, mas aqui está um script, que pode fazer o que é necessário (digamos que seria "MainScript"; se quiser, você pode colocar sua chamada: bash MainScript.sh <args>
- em outro arquivo, diga "CallScript").
Versão light
$ cat MainScript.sh
#!/bin/bash
CFG_FILE="matlab.cfg"
function make_config() {
arr=("$@")
echo -n "" > $CFG_FILE
for i in "${!arr[@]}"; do
echo "Variable$((i+1)) = ${arr[i]}" >> $CFG_FILE;
done
}
make_config $@
Aqui está o "CallScript":
$ cat CallScript.sh
bash MainScript.sh 1 11 27 23 44
Agora altere as permissões do "CallScript.sh":
$ chmod +x CallScript.sh
E você pode lançá-lo de uma maneira:
$ ./CallScript.sh
para produzir um arquivo de configuração como este:
$ cat matlab.cfg Variable1 = 1 Variable2 = 11 Variable3 = 27 Variable4 = 23 Variable5 = 44
Versão mais complicada
Por outro lado, se você quiser ter (predefinidos) diferentes nomes personalizados de variáveis, você pode fazer algo assim:
$ cat MainScript.sh
#!/bin/bash
CFG_FILE="matlab.cfg"
MLAB_VARS=("CustomVariable1" "CustomVariable2" "VeryCustomVariable11")
function make_config() {
arr=("$@")
var_length=${#MLAB_VARS[@]}
entered_length=$#
[ $var_length -gt $entered_length ] && \
echo "Please enter more than or equal $var_length number of values for setting variables" && \
usage && exit 1
echo -n "" > $CFG_FILE
for i in "${!MLAB_VARS[@]}"; do
echo "${MLAB_VARS[i]} = ${arr[i]}" >> $CFG_FILE;
done
}
function usage() {
cat << EOF
Usage:
MainScript.sh [value [value [value [...]]]]
where each value will be used to set corresponding variable
EOF
}
make_config $@
então
bash MainScript.sh 1 11 27
produzirá
$ cat matlab.cfg CustomVariable1 = 1 CustomVariable2 = 11 VeryCustomVariable11 = 27
e
$ bash MainScript.sh 1 11
Please enter more than or equal 3 number of values for setting variables
Usage:
MainScript.sh [value [value [value [...]]]]
where each value will be used to set corresponding variable
Versão complexa
Se você quiser apenas passar todo o mapa de valores de variáveis dinamicamente, use a seguinte abordagem:
$ cat MainScript.sh
#!/bin/bash
CFG_FILE="matlab.cfg"
usage() {
cat << EOF
Usage:
MainScript.sh [value [value [value [...]]]]
where each value will be used to set corresponding variable
EOF
}
make_config() {
arrays_str="${@}"
array_var="${arrays_str#*#}"
# create new associative array with varname-values pairs from string
eval "declare -A mlab_vars=${array_var#*=}"
array_ord="${arrays_str%#*}"
# create new array with vars orders from string
eval "declare -a mlab_ords=${array_ord#*=}"
echo -n "" > $CFG_FILE
for key in "${mlab_ords[@]}"; do
echo "$key" = "${mlab_vars[$key]}" >> $CFG_FILE;
done
}
declare -A var_array
declare -a var_order
for arg in "$@"
do
case $arg in
-*=*|--*=*)
arg_name="${arg%=*}"
arg_name="${arg_name#*-*}"; arg_name="${arg_name#-}"
var_array["${arg_name}"]="${arg#*=}"
var_order+=( "${arg_name}" )
shift # past argument=value
;;
h|--help)
usage
exit 0
;;
*)
# unknown option
shift
;;
esac
done
# convert associative array to string
assoc_array_string="$(declare -p var_array)"
assoc_array_orders="$(declare -p var_order)"
make_config "$assoc_array_orders # $assoc_array_string"
Em seguida, use-o da seguinte forma:
$ bash MainScript.sh --CustomVar=1230 --Var1=5613 --Var2="MatLab Rabbit" --Var3="1328"
E os resultados serão:
$ cat matlab.cfg CustomVar = 1230 Var1 = 5613 Var2 = MatLab Rabbit Var3 = 1328
Embora não se esqueça de verificar sua versão bash:
$ bash --version
Deve ser pelo menos a versão 4 para ter matrizes associativas