온라인 ShellCheck 를 사용하여 쉘 스크립트를 쉽게 확인할 수 있습니다 (독립형 도구로도 사용 가능).
이 경우, 만약 문 후 공간, 필요가 있다고 지적합니다 [
그리고 전에 ]
당신이 필요하고, 그 ;
전과 (또는 줄 바꿈)를 then
같은 줄에.
당신이 그것을 고치면, 그것은 USER_NAME
아무것도 초기화되지 않고 사용 되었음을 알려줍니다 . user_name
변수 (사건) 도 있기 때문 입니다. PASS
및에 대해서도 마찬가지입니다 pass
.
또한 맹 글링 read -r
을 멈추는 데 사용 하고 (예를 들어 암호에 중요 할 수 있음) 쉘이 실수로 파일 이름 globbing 및 단어 분리를 수행하지 않도록 호출 할 때 변수를 큰 따옴표로 묶어야한다고 알려줍니다 (다시 중요한 경우 예를 들어, 비밀번호에는 , 또는 공백 과 같은 파일 글 로빙 문자가 포함됩니다 .read
\
sqlplus
*
코드를 들여 쓰면 더 읽기 쉽다 :
#!/bin/bash
read -r -p 'please enter username: ' user_name
IFS= read -rs -p 'please enter password: ' pass
printf 'ORACLE_SID = %s\n' "$ORACLE_SID"
sid=$ORACLE_SID
if [ "$sid" = 'Test' ]; then
echo 'Cannot copy' >&2
exit 1
fi
sqlplus -s -l "$user_name/$pass@$sid" <<'SQL_END'
copy from scott/tiger@orcl insert EMP using select * from EMP
exit
SQL_END
여기 IFS
에서 비밀번호 읽기를 위해 빈 문자열 로 임시 설정 하여 선행 또는 후행 공백 문자와 함께 비밀번호를 사용할 수도 있습니다 read
.
$ORACLE_SID
/ $sid
가 있으면 논리가 구제되도록 변경되었습니다 Test
. 이렇게하면 스크립트의 주요 운영 부분이 if
브랜치에 포함되지 않습니다.