Linux에서 쉘 스크립트를 사용하여 Java 코드를 컴파일하고 실행

a·2023년 3월 2일

코테 프로젝트

목록 보기
2/4

프로그래머로서 명령줄에서 Java 프로그램을 컴파일하고 실행해야 하는 상황에 직면했을 수 있습니다. 수동으로 수행하면 특히 프로세스를 여러 번 반복해야 하는 경우 시간이 많이 걸릴 수 있습니다. 이 경우 셸 스크립트를 사용하여 프로세스를 자동화할 수 있습니다.

이번 프로젝트에서 서버에서 java, python, c, c++ etc 같이 여러 언어를 돌려야되서 찾아보게 되었습니다.

1단계: 셸 스크립트 만들기

셸 스크립트를 만들려면 텍스트 편집기를 열고 새 파일을 만듭니다. 원하는 텍스트 편집기를 사용할 수 있지만 대부분의 Linux 시스템에 사전 설치된 Vim 또는 Nano를 사용하는 것이 좋습니다. 저는 이번에 vim을 사용하여 작성하였습니다.

다음으로 Java 파일과 매개 변수 파일이라는 두 가지 인수를 허용하는 기본 셸 스크립트를 만듭니다. 예를 들면 다음과 같습니다.

    #!/bin/bash

    file="$1"
    param="$2"

    # check if the file exists
    if [ ! -f "$file" ]; then
      echo "File not found: $file"
      exit 1
    fi
    
    # check if the params exists
    if [ ! -f "$params" ]; then
            echo "params not fond: $params"
            exit 1
    fi
    
    # get the file's extension
    ext="${file##*.}"

    # compile and execute the Java file
    if [ "$ext" = "java" ]; then
      # extract the directory path and file name without extension
      dir=$(dirname "$file")
      filename=$(basename "$file" .java)

      # compile the Java file
      javac "$file"
      if [ $? -ne 0 ]; then
        echo "Compilation failed"
        exit 1
      fi

      # run the Java program with the given parameter file
      cd "$dir"
      java "$filename" "$(cat "$param")"
      cd -
    else
      echo "Invalid file type: $ext"
      exit 1
    fi

이 스크립트는 주어진 파일이 존재하는지 확인하고 존재하는 경우 파일의 확장자를 추출합니다. 확장자가 "java"인 경우 "java" 명령을 사용하여 파일을 컴파일하고 매개 변수 파일의 내용을 인수로 전달하여 "java" 명령을 사용하여 실행합니다. 파일의 확장자가 "java"가 아닌 경우 오류 메시지를 표시하고 종료됩니다.

params를 single Argument로 받을 시

#!/bin/bash

file="$1"
params="$2"

# check if the file exists
if [ ! -f "$file" ]; then
        echo "File not fond: $file"
        exit 1
fi

 # check if the params exists
 if [ ! -f "$params" ]; then
         echo "params not fond: $params"
         exit 1
 fi
  
# get the file's extension
ext="${file##*.}"

#compile and execute the java file
if [ "$ext" = "java" ]; then

        # extract the directory path and file name without extesntion

        dir=$(dirname "$file")
        filename=$(basename "$file" .java)

        # compile the java file
        javac "$file"
        if [ $? -ne 0 ]; then
                echo "Compilation failed"
                exit 1
        fi

        # run the java program with the given parameter file
        cd  "$dir"
        java "$filename" "$params"
        cd -
else
        echo "Invalid file type: $ext"
        exit 1
fi

"$filename" "$params" 일 경우 singe argument로 인식하게되고
"$filename" "$(cat "$params")"일 경우 공백에 따라 분리된 argument로 인식한다.

2단계: 스크립트를 실행 가능하게 만들기

쉘 스크립트를 실행하기 전에 실행 가능하게 만들어야 합니다. 이렇게 하려면 터미널 창을 열고 스크립트가 저장된 디렉토리로 이동합니다. 그런 다음 다음 명령을 실행합니다.

chmod +x script.sh

이 명령은 스크립트에 대한 실행 권한을 부여합니다.

3단계: 스크립트 실행

스크립트를 실행하려면 터미널 창을 열고 스크립트가 저장된 디렉토리로 이동합니다. 그런 다음 다음 명령을 실행합니다.

./script.sh file.java param.txt

이 명령은 자바 파일과 매개변수 파일을 인수로 전달하여 스크립트를 실행합니다. 모든 것이 올바르게 작동하면 스크립트가 Java 코드를 컴파일하고 실행하여 터미널 창에 출력을 표시해야 합니다.

결론

이 글에서는 java 코드를 사용하여 컴파일하고 실행하는 쉘 스크리트를 만들었습니다. 프로젝트에서는 java 만이 아닌 python, c ,c++ 언어 또한 사용되도록 하였습니다.
또한 파라미터를 받을 때 txt파일이 아닌 문자열로 받도록 고쳤습니다.

0개의 댓글