如何在Bash脚本中遍历全局变量列表实现重复逻辑?
批量处理全局变量的Bash脚本实现
需求背景
需要对一组全局变量(如CONFIG_SERVER_USER="client"、CONFIG_SERVER_PASS="s3cr3t"、CONFIG_SERVER_PORT=8881)执行重复操作:检查变量是否存在,若不存在则写入/etc/environment并加载该文件,最后输出变量值。需将原针对单个CONFIG_SERVER_USER的硬编码逻辑改为通用的批量处理逻辑。
原单个变量处理逻辑(参考)
# 针对CONFIG_SERVER_USER的硬编码处理 if [ -z "${CONFIG_SERVER_USER}" ]; then echo 'CONFIG_SERVER_USER="client"' >> /etc/environment source /etc/environment fi echo "CONFIG_SERVER_USER value: ${CONFIG_SERVER_USER}"
优化后的批量处理脚本
# 定义待处理的全局变量列表,每个元素为"变量名=值"格式 declare -a env_vars=( 'CONFIG_SERVER_USER="client"' 'CONFIG_SERVER_PASS="s3cr3t"' 'CONFIG_SERVER_PORT=8881' ) # 遍历处理每个变量 for var_entry in "${env_vars[@]}"; do # 拆分变量名和对应值 var_name=$(echo "$var_entry" | cut -d'=' -f1) var_value=$(echo "$var_entry" | cut -d'=' -f2-) # 检查变量是否未定义或为空 if [ -z "${!var_name}" ]; then # 将变量写入/etc/environment echo "$var_entry" >> /etc/environment # 加载环境变量文件 source /etc/environment fi # 输出当前变量的值 echo "${var_name} value: ${!var_name}" done
关键说明
- 批量管理:通过数组
env_vars统一维护所有需要处理的变量,后续新增/修改变量只需调整数组内容,无需重复编写逻辑 - 动态变量引用:使用
${!var_name}实现间接变量引用,避免硬编码变量名,适配任意变量的处理 - 兼容性:通过
cut命令拆分变量名和值,兼容带引号(如字符串类型)和不带引号(如数字类型)的变量值 - 权限要求:写入
/etc/environment需要root权限,执行脚本时需添加sudo前缀
内容的提问来源于stack exchange,提问作者Andrzej Więcławski
相关产品推荐
相关产品推荐

