我在红帽上。
我正在尝试通过组合三个名称来创建目录。
我有一个属性文件,如下所示:
build_name = MyBuild
build_no = 100
appServer_version = jboss6.1`
我阅读了此属性文件,并尝试通过组合所有三个名称来创建一个目录。创建目录后,它应该看起来像这样。
MYBuild-100-jboss6.1
这是我尝试过的
file="./app.properties"
if [ -f "$file" ]
then
echo "$file found."
while IFS='=' read -r key value
do
key=$(echo $key | tr '.' '_')
eval "${key}='${value}'"
done < "$file"
echo "build_name = " ${build_name}
echo "build_no = " ${build_no}
echo "Jboss_version = "${jboss_version}
echo "Got the value from property file"
name=${build_name}-
build=${build_no}-
Jboss=${jboss_version}
fileName="${name}${build}${Jboss}"
mkdir $fileName
else
echo "$file not found."
fi
当我运行这个时,它总是创建三个不同的目录,名称为MyBuild
, 100
, jboss6.1
。哪里做错了。
更新1
file="./app.properties"
ARRAY=()
if [ -f "$file" ]
then
echo "$file found."
IFS='='
while read -r key value
do
val=$(echo "$value" | tr -d '[[:space:]]')
ARRAY+=("$val")
done < "$file"
IFS='-'
newdir="${ARRAY[*]}"
echo "mkdir $newdir"
if[ -f "$newdir" ]
then
echo "$newdir allready exist."
rm -rf $newdir
mkdir "$newdir"
else
mkdir "$newdir"
else
echo "$file not found."
fi
答案1
read
您有两个问题,首先是执行with时变量中留下的空格IFS='='
。其次,您jboss_version
的应用程序文件中实际上没有。一种方法是:
file="./app.properties"
if [ -f "$file" ]
then
echo "$file found."
while IFS='=' read -r key value
do
key=$(echo $key | tr '.' '_' | tr -d ' ' | tr -d '\t')
val=$(echo $value | tr -d ' ' | tr -d '\t')
eval "${key}='${val}'"
done < "$file"
echo "build_name = " ${build_name}
echo "build_no = " ${build_no}
echo "Jboss_version = "${appServer_version}
echo "Got the value from property file"
name=${build_name}-
build=${build_no}-
Jboss=${appServer_version}
fileName="${name}${build}${Jboss}"
echo mkdir [$fileName]
else
echo "$file not found."
fi
然而,我会用不同的方式来做。通过强制IFS
在拆分和连接中使用,这也使用app.properties
文件中的所有变量:
file="./app.properties"
ARRAY=()
if [ -f "$file" ]
then
echo "$file found."
IFS='='
while read -r key value
do
val=$(echo "$value" | tr -d '[[:space:]]')
ARRAY+=("$val")
done < "$file"
IFS='-'
newdir="${ARRAY[*]}"
if [ -d "$newdir" ]; then
echo "rm -rf $newdir"
rm -rf "$newdir"
fi
echo "mkdir $newdir"
mkdir "$newdir"
else
echo "$file not found."
fi
答案2
您的脚本存在多个问题,如果不完全重写它,您必须:
- 去掉
value
任何空格 - 在脚本中使用 appServer_version,就像在输入文件中而不是 JbossVersion 中一样
在职的:
file="./app.properties"
if [ -f "$file" ]
then
echo "$file found."
while IFS='=' read -r key value
do
key=$(echo $key | tr '.' '_')
value=$(echo $value | sed 's/ //g')
eval "${key}='${value}'"
done < "$file"
echo "build_name = " ${build_name}
echo "build_no = " ${build_no}
echo "Jboss_version = "${appServer_version}
echo "Got the value from property file"
name=${build_name}-
build=${build_no}-
Jboss=${appServer_version}
fileName="${name}${build}${Jboss}"
echo $fileName
# mkdir $fileName
else
echo "$file not found."
fi
答案3
跳过 #comments 或 app.properties 中的一些垃圾 #!/bin/bash
FILE="./app.properties"
SEP=
FILENAME=
while read -r LINE; do
LINE=$(echo ${LINE} | sed -rn -e '/=/{/#.*/d;s/[^=]+=([^=]+).*/\1/;s/[ ]*//gp}' )
[[ -n ${LINE} ]] && FILENAME+=${SEP}${LINE} && [[ -z ${SEP} ]] && SEP="-"
done <"$FILE"
echo $FILENAME
#mkdir $FILENAME