2つの名前を組み合わせてディレクトリを作成するには?

2つの名前を組み合わせてディレクトリを作成するには?

私は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という1003つの異なるディレクトリが作成されます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

read2つの問題があります。 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

関連情報