![](/img/trans.png)
[英]How to access a groovy variable in shell script in jenkins pipeline?
[英]How to Access a variable in a Shell script
我目前坚持如何执行以下操作:
我有一个如下所示的settings
文件:
USER_ID=12
ROLE=admin
STARTED=10/20/2010
...
我需要访问角色和 map 角色到下面脚本中的变量之一。 在我将使用该变量调用打开具有正确名称的文档之后。
测试.sh
#!/bin/sh
ADMIN=master_doc
STAFF=staff_doc
GUEST=welcome_doc
echo "accessing role type"
cd /setting
#open `settings` file to access role?
#call correct service
#chmod 555 master_doc.service
有没有办法像 javascript 那样使用 bash 插入字符串? 另外,我猜我需要遍历设置文件才能访问角色?
使用bash
和grep
并假设settings
文件恰好有一行以ROLE=
开头:
#!/bin/bash
admin=master_doc
staff=staff_doc
guest=welcome_doc
cd /setting || exit
role=$(grep '^ROLE=' settings)
role=${role#*=}
echo chmod 555 "${!role}.service"
在确保它按预期工作后放下echo
。
查看Shell 参数扩展以进行indirect expansion
。
据我了解,您想从settings
获取变量,使用$role
作为对$admin
的间接引用,即master_doc
,然后将其转换为字符串master_doc.service
。
您可以使用source
从另一个文件中获取变量,以及函数和其他内容。
最后,要取消引用变量,您需要使用美元符号,例如$role
。 变量引用在双引号内展开,所以这相当于字符串插值。
#!/bin/bash
# Associative array with doc names
declare -A docs=(
[admin]=master_doc
[staff]=staff_doc
[guest]=welcome_doc
)
echo "accessing role type"
cd setting || exit
source settings # Import variables
true "${ROLE?}" # Exit if unset
echo chmod 555 "${docs[$ROLE]}.service" # Select from associative array
# ^ Using "echo" to test. Remove if the script works properly.
您可以获取设置文件以加载变量:
source settings
然后你可以在你的脚本中使用它们:
chmod 555 "${admin}.service" # will replace ${admin} with master_doc
我当然会使用source(.)
#!/bin/sh
ADMIN=master_doc
STAFF=staff_doc
GUEST=welcome_doc
echo "accessing role type"
. /setting/settings 2> /dev/null || { echo 'Settings file not found!'; exit 1; }
role=${ROLE^^} # upercase rolename
echo ${!role}.service # test echo
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.