私はRed Hatを使用しています。
3つの名前を組み合わせてディレクトリを作成しようとしています。
次のプロパティファイルがあります。
build_name = MyBuild
build_no = 100
appServer_version = jboss6.1`
このプロパティファイルを読み込み、3つの名前をすべて組み合わせてディレクトリを作成しようとしました。ディレクトリが作成されたら、次のようにする必要があります。
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
3つの異なるディレクトリが作成されます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
2つの問題があります。 1つ目は、を使用したときに変数に残ったスペースですIFS='='
。第二に、jboss_version
実際にはアプリケーションファイルにその内容がありません。 1つの方法は次のとおりです。
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
スペースを削除- JbossVersionの代わりに入力ファイルと同様に、スクリプトでappServer_versionを使用します。
布材:
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
#コメントまたは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