[완료]쉘스크립트안에서 변수의 값, 즉 문자열안에 포함되는 단어 검색 및 치환 이 잘안되요.

flymc83의 이미지

안녕하세요. 쉘스크립트를 처음 다뤄보느라 애매하기도 하고 어려움이 있어서 질문을 올립니다.
제목그대로 입니다.
파일기준으로 문자열을 수정하는게 아닙니다.!!!!!!
파일기준이 아니라 변수기준으로 수정을 해야합니다. ^^
bash 쉘입니다.

내용을 보시면
ORDER=`gsetting get com.canonical.Unity.Panel systray-whitelist` #요건 터미널에서 실행할 명령어입니다.
RESULT= #실행하고 명령어의 결과를 저장할녀석

RESULT=$ORDER #명령어를 실행하고 나서 받아오는 결과를 RESULT변수에 넣었습니다.

if [ 1.여기에서 RESULT에 "Nabi"가 포함이 안되어 있는지를 체크하여 참이라면 ]; then

# 예를 들면 ORDER결과가 "['Orange', 'Apple', 'Grape']" 입니다.
# 2.여기에서 Nabi를 붙여서 ORDER ="['Orange', 'Apple'. 'Grape', 'Nabi']" 로 만들어 다시 ORDER에 넣어야합니다.

fi

제가 생각한건 if문 안에서 파일이 아니니까 grep이나 sed는 사용 못할테고 c언어에서 strcmp와 비슷한기능을 하는 명령어가 없는것 같습니다.
cut으로 잘라서 시도해 보았지만.. 배열에 넣는것도 잘 모르겠네요. ㅠㅠ
1.
2. 번 2가지를 해결해야하는데 2번은 문자열 패턴인가를 이용해여 ']'를 'OK'] 로 치환하면 될것 같긴합니다.

스크립트 내용관련된 포스팅만 주구장창 보고 따라했는데도 역시 많이 안해봐서인지 개념을 못잡아서 허둥지둥 대고 있습니다.
한가지 팁만이라도 알려주시면 참고해서 작성해보도록 하겠습니다.
감사합니다.
--------------------------------------------------------------------------------
답변감사합니다. 질문내용을 약간 바꾸었습니다. 죄송합니다. ㅠㅠ

ymir의 이미지

bash 의 replace 썼는데, 그냥 sh 라면 sed 쓰시면 될 것 같네요.

$ A="['Orange', 'Apple', 'Grape', 'Nabi']"
$ echo $A
['Orange', 'Apple', 'Grape', 'Nabi']
$ echo $A | grep "'Nabi'" >/dev/null && echo ${A/"']"/"', 'OK']"} || echo $A
['Orange', 'Apple', 'Grape', 'Nabi', 'OK']
$ echo $A | grep "'Nabiy'" >/dev/null && echo ${A/"']"/"', 'OK']"} || echo $A
['Orange', 'Apple', 'Grape', 'Nabi']

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

flymc83의 이미지

감사합니다. 참고해서 작성해보도록 하겠습니다. ^^

flymc83의 이미지


[해결] 부가설명을 달아보겠습니다.

shell scrip에서 문자열이라고 칭하는 윗예제에서

ORDER="['Orange', 'Apple', 'Grape']"

요렇게 있을때에는 문자형함수(?) 라고 해야하나요?
네 여기서 예를들어보면
echo ${ORDER/'Grape'/'StrawBerry'}
요랬을때는 문자열이 잘 치환이 되서
['Orange', 'Apple', 'StrawBerry']
요렇게 나옵니다.

하지만 그 안에 영문자+특수기호가 들어갔을때에는 어떻게 고쳐야 하냐면!!!
echo ${ORDER / \[ "'Orange'" / \] "'What?$%#$'"}
(1) (2) (3) (4) (5) (6) (7)
(1) 대상문자열
(2) 구분자 1
(5) 구분자 2
(3) 특수문자가 꼈다면 역슬래쉬(\)를 앞에 붙이고 특수문자를 바로뒤에쓰면 의미없는 특수문자로 인식
(4) ""(쌍따옴표) 안에 특수문자가 꼈던 어쨌든 아무렇게나 넣어주세요.
(6) (3)번과 마찬가지
(7) ""(쌍따옴표) 안에 바꿀내용을 적어주세용 아무렇게나 넣어주세요.

이상으로 처리하면 간단한 특수문자+영문문자열 치환이 성공하게 되겠습니다.
가장 기본적인 규칙을 잘 숙지하고서 스크립트를 작성해야겠다는 생각이 드네요.
하루이상을 고생한 기억을 몇자 남깁니다.
삽질 안하시길 ^^

raymundo의 이미지

한 스트링 안에 다른 스트링이 들어있나 테스트하는 건
http://stackoverflow.com/questions/229551/string-contains-in-bash
이 글타래를 보시면 여러 방법이 나와 있네요.

좋은 하루 되세요!

flymc83의 이미지

아네 감사합니다. ^^ 쭉 둘러보았습니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.