我有一个 bash 脚本,可以读取具有属性的文件。
属性文件
param1=value1
param2=value2
param3=value3
猛击
file="./parameters.txt"
if [ -f "$file" ]
then
echo "$file found."
while IFS='=' read -r key value
do
key=$(echo $key | tr '.' '_')
eval "${key}='${value}'"
done < "$file"
else
echo "$file not found."
fi
我想检查每个参数是否不为空。
if [ -z ${param1} ]
then
echo "Param1 is empty"; exit 1
fi
我可以检查它们,if-else
但我想知道一些更动态的方法。
最好的方法是什么?
答案1
嗯,最好的方法始终取决于用户。但是由于您正在使用bash
,因此您可以使用 shell 参数扩展${!<var-name>}
。
您还可以使用.
或source
读取包含变量的文件。
#!/bin/bash
file="./parameters.txt"
if [ -f "$file" ]
then
echo "$file found."
# Read in the values from the file.
. "${file}"
# Iterate over the keys of the file and test if the variable contains anything.
while read key;
do
# Here comes the parameter expansion.
if [ -z "${!key}" ]
then
echo "${key} is empty"
fi
done <<< $(cut -d '=' -f 1 parameters.txt)
else
echo "$file not found."
fi
答案2
尝试这个:
#!/bin/bash
check()
{
local file="./parameters.txt"
local assertion var val
while read assertion
do
var=${assertion/=*}
test "${var}" != "${assertion}" || return 1
val=${assertion#*=}
test -n "${val}" || return 3
done < ${file}
return 0
}
check