두 이름을 결합하여 디렉토리를 만드는 방법은 무엇입니까?

두 이름을 결합하여 디렉토리를 만드는 방법은 무엇입니까?

저는 Red Hat을 사용하고 있습니다.

세 개의 이름을 조합하여 디렉토리를 만들려고 합니다.

다음과 같은 속성 파일이 있습니다.

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두 가지 문제가 있습니다. 첫 번째는 을 사용할 때 변수에 남은 공간입니다 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공백을 제거하세요
  • 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

관련 정보