두 개의 bash 스크립트 결합 및 메뉴 사용

두 개의 bash 스크립트 결합 및 메뉴 사용

두 개의 스크립트가 있습니다. 하나는 csv 파일이 포함된 폴더용이고 다른 하나는 .tar.gz 파일이 포함된 폴더용입니다. 두 번째 스크립트에서는 작업을 수행하기 전에 먼저 파일의 압축을 풉니다. 이제 이 두 스크립트를 사용자가 사용하려는 폴더를 지정할 수 있는 하나의 스크립트로 결합하고 싶습니다. 스크립트를 실행할 때 사용자는 폴더A 또는 폴더B를 사용하는 두 가지 선택을 할 수 있습니다. 일종의 메뉴같습니다.

스크립트 A

#!/bin/bash
FOLDER=/path/to/folder
DATE_LOG=`date "+%Y-%m-%d-%H:%M:%S"`
LOG_FILE=/home/kamil/Desktop/Script/log_$DATE_LOG.txt


# Getting the pattern and headers of files from FOLDER
cd "$FOLDER"
    for file in *.csv; do
    echo -n "${file}" "|" | sed -r 's/(.*)_[0-9]{8}_[0-9][0-9]-[0-9][0-9].[0-9][0-9].csv/\1/'
        head -1 "$file"
    done | tee $LOG_FILE

스크립트 B

#!/bin/bash
FOLDER_HISTO=/path/to/folder/WithTAR.GZ
DATE_LOG=`date "+%Y-%m-%d-%H:%M:%S"`
LOG_FILE=/home/kamil/Desktop/Script/log_$DATE_LOG.txt


# Getting the pattern and headers of files from FOLDER_HISTO
cd "$FOLDER_HISTO"
    for zip_file in *.tar.gz; do
    file=`tar -xvf $zip_file`
    echo -n "${file}" "|" | sed -r 's/(.*)_[0-9]{8}_[0-9][0-9]-[0-9][0-9].[0-9][0-9].csv/\1/'
        head -1 "$file"
    done | tee $LOG_FILE 

답변1

메뉴를 만드는 표준 CLI 방식은 다음과 같습니다 select.

select response in "Folder 1" "Folder 2"
do
    case $response in
        "Folder 1") cd folder1; /path/to/ScriptA.sh; exit ;;
        "Folder 2") cd folder2; /path/to/ScriptB.sh; exit ;;
    esac
done

답변2

스크립트는 매우 유사하므로 하나의 스크립트로 결합하겠습니다. 두 가지 인수, 즉 파일 확장 방법에 대한 옵션 -tar또는 -csv표시와 확장 위치를 ​​나타내는 디렉터리 이름을 사용합니다 cd.

MODE=$1
FOLDER=$2
DATE_LOG=`date "+%Y-%m-%d-%H:%M:%S"`
LOG_FILE=/home/kamil/Desktop/Script/log_$DATE_LOG.txt

case "$mode" in 
    -tar) SUFFIX=tar.gz
          CMD="tar -xvf" 
        ;;
    -csv) SUFFIX=csv
          CMD="cat" 
        ;;
    *) echo Invalid mode "$mode" >&2; exit 1 ;;
esac

if ! cd "$FOLDER"
then echo "Bad folder $FOLDER" >&2
     exit 1
fi
for file in *.SUFFIX; do
    contents=`$CMD $file`
    echo -n "$contents" "|" | sed -r 's/(.*)_[0-9]{8}_[0-9][0-9]-[0-9][0-9].[0-9][0-9].csv/\1/'
    head -1 "$contents"
done | tee $LOG_FILE

루프에서 수행 중인 작업이 for옳지 않아 보이며 복사 버그에 더 가깝다고 생각됩니다. 실제로 수행 중인 작업을 위의 구조에 맞추는 방법을 알아낼 수 있기를 바랍니다. 일반적인 아이디어는 두 스크립트에서 서로 다른 모든 위치를 찾아서 명령문에 설정된 변수에 넣는 것입니다 case. 나처럼 간단한 변수 대체만으로 모든 작업을 수행할 수는 없을 수도 있습니다. if명령문이 필요할 수도 있습니다.

이것은 ... 불리운다마른원칙적으로.

패턴에 따라 폴더가 항상 동일한 경우 명령줄에서 요청하는 대신 FOLDER명령문 에 할당을 넣을 수 있습니다 . casemuru의 답변에 표시된 것처럼 명령줄 옵션을 메뉴로 바꿀 수도 있습니다.

관련 정보