如何通过组合两个名称来创建目录?

如何通过组合两个名称来创建目录?

我在红帽上。

我正在尝试通过组合三个名称来创建目录。

我有一个属性文件,如下所示:

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

相关内容