입력이 특정 형식을 준수하는지 확인하는 방법

입력이 특정 형식을 준수하는지 확인하는 방법

쉘 스크립트에 대한 도움이 필요합니다. 다음은 한 서버에서 다른 서버로 파일을 전송하는 쉘 스크립트입니다.

#!/bin/bash
echo "Please enter id no : "
read input_variable
echo "You entered: $input_variable"
HOST=xxxx
USER=xx
PASSWORD=xxx
ftp -inv $HOST <<EOF
user $USER $PASSWORD
cd /wpath/to/copy/files/$input_variable/inputs/final/
mput x.csv
bye
EOF

X.csv쉘 스크립트는 잘 작동합니다. 원격 서버에 존재하는 ID를 입력하면 파일이 복사됩니다. 하지만 아래에 나열된 몇 가지 문제가 있습니다.

  1. idno는 6자로 구성되어야 합니다(예 M000001: ).
  2. 올바른 ID를 입력하면 스크립트가 파일을 복사합니다. 하지만 잘못된 ID를 입력하면 예를 들면 다음과 같습니다. M000050원격 서버에 존재하지 않는 경우에도 파일이 복사되었음을 표시합니다. 하지만 파일을 어디에 복사하는지 모르겠습니다.
  3. 원격 시스템에 디렉터리가 없으면 디렉터리를 만들어야 합니다 /final/. 입력한 경로가 원격 서버에 나타납니다.

답변1

  1. ID 번호는 6자여야 합니다(예: M000001).

다음과 같은 작업을 수행할 수 있습니다.

if [[ ${#input_variable} != "6" ]] then
   echo "wrong length"
   exit 1
fi
  1. 올바른 ID를 입력하면 스크립트가 파일을 복사합니다. 하지만 잘못된 ID를 입력하면 예를 들면 다음과 같습니다. M000050이 원격 서버에 존재하지 않는 경우에도 파일이 복사되었음을 표시합니다. 하지만 파일을 어디에 복사하는지 모르겠습니다.

파일을 "기본" ftp디렉터리에 복사하고 cd실패하므로 이전 디렉터리에 갇히게 됩니다(명령을 사용하여 해당 디렉터리의 경로를 확인할 수 있습니다 pwd).

  1. /final/ 디렉토리가 원격 시스템에 존재하지 않으면 이를 생성해야 합니다. 원격 서버 앞에 나타날 경로를 입력하세요.
mkdir /wpath/to/copy/files/$input_variable/inputs/final/

이렇게 해야 해

관련 정보