간단한 cshell 스크립트 질문입니다..

tkddlfldpdyz의 이미지

cshell 입문자입니다.
cshell 스크립트를 이용해 파일 리스트를 읽는 중, # 처리가 있으면 생략하는것으로 인식하는 code 입니다

set no = 0
set list
set comment = "#"
foreach val (`cat $argv[1]`)
set result = `echo $val | awk -v
b="$comment" '$0 ~ b {print "MATCH"}'`

if ($result != "MATCH") then
set list = ($list $val)
endif
@ no++
end

여기서 이해가 안가는 부분은
set result = `echo $val | awk -v
가 어떻게 작동하는건지.. 와
@ no++ 는 무슨 의미인지 입니다..

처음이라 생소하고 어렵네요ㅠㅠ
도움 부탁드립니다.. 감사합니다

세벌의 이미지

간단하다고 하고 모른다고 하면 본인 스스로 모순을 말씀하시는 거 같은데요?
아래 링크 들러보셔요.
https://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP#AEN70

http://coffeenix.net/doc/shell_programming/shell346.html

익명 사용자의 이미지

이 분은 걸핏하면 질문하는 법 링크를 다는데, 정작 본인 질문할 때는 대충 질문하더군요. 의미 없는 댓글만 달지 말고 본인부터 질문할 때 잘 읽어보세요.

chanik의 이미지

저도 csh 잘 모르긴 합니다만..

set result = `echo $val | awk -v b="$comment" '$0 ~ b {print "MATCH"}'`

첫 번째 질문은 한 줄로 정리하면 위와 같이 실행하려는 의도같은데요. 만약 $val 내용물 안에 $comment 내용물이 포함돼 있으면 위 코드는 set result = MATCH 으로 바뀌게 되고, 만약 포함돼 있지 않으면 set result = 이 됩니다.

`` 사이의 코드만 빼서 아래와 같이 변수확장된 상태로 실험해보면 감이 올 것입니다. "#test", "te#st" 처럼 #이 포함된 문자열을 줄 때만 MATCH가 출력되는 모습이 보이죠.

% echo "#test" | awk -v b="#" '$0 ~ b {print "MATCH"}'
MATCH
% echo "te#st" | awk -v b="#" '$0 ~ b {print "MATCH"}'
MATCH
% echo "test" | awk -v b="#" '$0 ~ b {print "MATCH"}'

awk를 모르시면 왜 이렇게 동작하는지 알기 어려울 것입니다. https://mug896.github.io/awk-script/ 페이지가 도움이 될 것입니다. awk는 텍스트처리를 위한 작은 프로그래밍언어 정도 됩니다. 조금 공부해두시면 매우 유용합니다.

두 번째 질문의 @ no++는 변수 no 값을 1 증가시키는 명령입니다. 아래와 같은 식입니다.

% set no = 0
% echo $no
0
% @ no++
% echo $no
1
% @ no--
% echo $no
0
% foreach val ( She loves him not you )
?   @ no++
? end
% echo $no
5

tkddlfldpdyz의 이미지

구글에서 특수문자 검색이 안돼서 막막했는데 감사합니다.
답변주셔서 정말 감사드립니다. 세벌님 앞으로는 이런질문 안올리겠습니다.

chanik 님 친절한 답변 정말 감사드립니다.
씨쉘을 처음 접하는데 너무 많은 도움이 됐습니다. 막혔던 속이 뻥 뚫리는 기분이네요.
좋은하루 되세요

익명 사용자의 이미지

cshell은 근래에는 사용되지 않고 있습니다.
가능하면 다른 shell을 사용하심이 낫겠습니다.

https://www.grymoire.com/unix/CshTop10.txt

chanik의 이미지

올리신 질문글에 저는 아무 문제도 느끼지 못했습니다. 사소한 이유로 질문을 멈추지는 않으시면 좋겠습니다.

다만, 글에 코드를 포함할때는 <code> ... </code> 태그로 감싸서 올리시면 보기에 좋게 올라갑니다. <code lang="bash"> ... </code> 식으로 언어를 명시하면 문법강조도 이뤄집니다. 글 작성창 아래를 잘 보시면 텍스트 포맷에 대한 도움말 링크가 있습니다. 미리보기 기능도 있으므로 올리기 전에 글의 모양을 확인할 수도 있고요.

swish95의 이미지

본인이 정답이라고 생각하는 누군가 때문에 선의의 피해자가 생기는 모양이군요

------------------------------------------------------------
ProgrammingHolic

세벌의 이미지

질문 하는 사람이 "이 문제 쉬운 건데요 풀어주세요" 라고 한다면?
실제로 쉬울 수도 있고, 보기와는 달리 어려운 문제일 수도 있다는 뜻이죠.

kldp 에 소스 코드 넣을 때 code 태그 안 넣으면, 답변하려는 분이 도와주기 어려운 상황이 될 수 있지요.

앞으로도 질문할 사항 있으면 질문 하세요.

저 처럼 까칠한 답변 받더라도 기 죽지 마시고요 ;)

chanik의 이미지

글쓴이는 '쉬운 건데 풀어달라'는 의도가 깔린 말은 하지 않았고, 그냥 간단한 스크립트라고 했습니다. 제가 보기에도 간단해 보였는데, 처음 접하는 분이니 간단한 것에 어려움을 느끼는 것도 당연한 것이죠.

자연스러운 질문글을 굳이 비틀어 해석하여 첫 덧글로 엄한 트집을 잡으셨는데, 이번 덧글에는 '오해는 없길 바랍니다' 제목을 달고는 상대를 쉬이 보는듯한 말까지 하시니 읽는 입장에서 위화감이 적지 않군요. 정작 오해를 한 사람은 글쓴이가 아닌데 말이죠.

여기까지 동감하실런지 모르겠으나 나름대로 솔직하게 적은 글이니, 타인의 눈에는 이렇게 보이기도 한다는 점은 믿어보셔도 될 것입니다.

댓글 달기

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