쉘스크립트 오류 어디가 문제일까요??

khalisto의 이미지

안녕하세요.

늦깍이 대학생이 과제로 쉘 프로그래밍을 개발하고 있는데 막히는 것이 한두가지가 아니네요 ^^;;

현재 작성하고 있는 프로그램 코드는 아래와 같습니다.

#!/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

와 같이 패스워드가 잘못되었다고 에러를 뿜어내네요 ㅎㅎ

혹시 제가 잘못 짚은 부분이 있는지 조언을 부탁드려봅니다. ^^

감사합니다.

mirheekl의 이미지

로컬 변수 하나를 더 선언해서 진짜 패스워드, 즉 '#!fwlkefl34ere!!' 같은걸 집어넣고

1. 이 변수를 사용해서는 로그인이 제대로 되는지 확인한후
2. 문자열 비교 함수를 넣어서 입력값과 해당 변수가 같은지 확인해볼듯 합니다. 아마 다르게 나올것 같네요. 화이트스페이스라든지 대소문자라든지.. 여튼 뭔가 찍었을때 잘 구분하기 어려운 일이 있었을듯 싶네요. 제가 문자열 로깅을 잘 신뢰하지 않는 이유이기도 합니다.

--

ymir의 이미지

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 』

rocksea의 이미지

#!/bin/sh

echo -n "Input Your DB root pwd:"
read inpwd

mysqldump -urocksea -p${inpwd} rocksea > rocksea_success.sql

===============================================================
위 코드로 한번에 성공했네요.

참고 하세요.

Knowleage Creator.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.