쉘스크립트 오류 어디가 문제일까요??
안녕하세요.
늦깍이 대학생이 과제로 쉘 프로그래밍을 개발하고 있는데 막히는 것이 한두가지가 아니네요 ^^;;
현재 작성하고 있는 프로그램 코드는 아래와 같습니다.
#!/bin/sh
echo -n "Input Your DB root pwd:"
read inpwd
db_pwd="'"$inpwd"'"
echo $db_pwd
mysqldump --user='root' --password=$db_pwd --default-character-set=utf8 abc > abc.sql
mysqldump 명령어 ID와 패스워드값을 명시해두었는데 원래는 패스워드값에 실제 루트 패스워드를 입력을 해두었습니다.
ex) --password=$db_pwd 가 아닌 --password='#!fwlkefl34ere!!' <- 이런식으로요
허나 보안상 위험할 것 같아 위 소스처럼 echo -n 으로 직접 패스워드를 입력받아 대입하는 방법으로 작성 중에 있는데
실제 입력 받을 때는 --password=' ' 의 ' ' 를 제외한 값만 받게 되어서 ($inpwd 에) 이에 대한 값을
db_pwd 변수에 db_pwd="'"$inpwd"'" 형식으로 앞 뒤에 ' ' 를 붙이도록 되어 있습니다.
테스트를 위해 echo $db_pwd 를 통해 입력된 값을 확인해보면 정상적으로 입력받은 값 앞뒤에 ' ' 가 붙어있는데
실제 mysqldump --user='root' --password=$db_pwd --default-character-set=utf8 abc > abc.sql
에서는 mysqldump: Got error: 1045: Access denied for user 'root'@'localhost' (using password: YES) when trying to connect
와 같이 패스워드가 잘못되었다고 에러를 뿜어내네요 ㅎㅎ
혹시 제가 잘못 짚은 부분이 있는지 조언을 부탁드려봅니다. ^^
감사합니다.
저라면 테스트 변수를 하나 더 선언해서..
로컬 변수 하나를 더 선언해서 진짜 패스워드, 즉 '#!fwlkefl34ere!!' 같은걸 집어넣고
1. 이 변수를 사용해서는 로그인이 제대로 되는지 확인한후
2. 문자열 비교 함수를 넣어서 입력값과 해당 변수가 같은지 확인해볼듯 합니다. 아마 다르게 나올것 같네요. 화이트스페이스라든지 대소문자라든지.. 여튼 뭔가 찍었을때 잘 구분하기 어려운 일이 있었을듯 싶네요. 제가 문자열 로깅을 잘 신뢰하지 않는 이유이기도 합니다.
--
음 ..
db_pwd="'"$inpwd"'" 하고 나서, db_pwd 라는 변수를 사용할 때, 쉘에서 db_pwd 안의 ' 를 문자열의 일부로 인식하는 것 같네요.
그냥 --password="$inpwd" 로 쓰셔도 무방할 것으로 보입니다.
아니면 mysqldump 앞에 eval 을 쓰면 변수를 먼저 평가하고 나서 명령을 수행하니까, 원하는 대로 실행될 겁니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
#!/bin/sh echo -n "Input
#!/bin/sh
echo -n "Input Your DB root pwd:"
read inpwd
mysqldump -urocksea -p${inpwd} rocksea > rocksea_success.sql
===============================================================
위 코드로 한번에 성공했네요.
참고 하세요.
Knowleage Creator.
댓글 달기