두 개의 스크립트가 있습니다. 하나는 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
명령문 에 할당을 넣을 수 있습니다 . case
muru의 답변에 표시된 것처럼 명령줄 옵션을 메뉴로 바꿀 수도 있습니다.