본문 바로가기
Linux

[Linux] C Shell Script - 제어문(1)

by RTLog 2024. 3. 26.
728x90
반응형

안녕하세요. RTLog입니다.

오늘은 C Shell Script에서 활용할 수 있는 제어문에 대해 알아보겠습니다. 

 

사용 가능한 제어문은 "if - else", "for - each", "while" ,"switch", "break", "continue", "goto", "exit" 등의 키워드들이 있는데요. C언어와 매우 유사하기 때문에 쉽게 익힐 수 있습니다. 

 

이번 포스트에서는 "if-else"와 "for - each"에 대해서 작성해보겠습니다. 

if - else

아래는 사용 예시입니다. ("expression"에는 Ture/False를 나타냄)

1. if (expression) command

2. if (expression) then
      command(s)
   endif

3. if (expression) then
      command(s)
   else
      command(s)
   endif

4. if (expression) then
      command(s)
   else if (expression) then
      command(s)
   . . .
   else
      command(s)
   endif

 

C Shell에는 파일의 존재 유무나 특성을 확인할 수 있는 기능인 File Inquiry Operator를 제공합니다. 아래에 제시된 연산자의 결과는 True/False로, 조건문에서 활용될 수 있습니다. 

 

- 사용법: if ( -operator filename ) or if (! -operator filename )

- operator list

  • r : read access (읽을 수 있는가?)
  • w : write access (쓸 수 있는가?)
  • x : execute access (실행할 수 있는가?)
  • e : existence (파일이 있는가?)
  • o : ownership (파일의 소유주인가?)
  • z : zero length (파일 길이가 0 인가?)
  • f : plain file (보통 파일인가?)
  • d : directory (디렉토리 파일인가?)
  1 # !bin/csh
  2 # "Simple Test"
  3 echo "number: "
  4 set num = $<
  5
  6 echo -n "Input Number is "
  7 echo $num
  8
  9 if ($num > 10) then
 10     echo "Good"
 11 else
 12     echo "Bad"
 13 endif
 
 14 # "Check File Permission"
 15 set testfile = $1
 16 if (! -e $testfile) then
 17    echo “$testfile is not exist”
 18    exit
 19 endif
 20
 21 if (-z $testfile) then
 22     echo “$testfile is blank file”
 23 else if (-f $testfile) then
 24    @ mode = 0
 25    if (-r $testfile) @ mode += 4
 26    if (-w $testfile) @ mode += 2
 27    if (-x $testfile) @ mode += 1
 28
 29    if ($mode == 7) echo “$testfile mode is Read, Write, Execute”
 30    if ($mode == 6) echo “$testfile mode is Read, Write”
 31    if ($mode == 4) echo “$testfile mode is Read Only”
 32
 33 else if (-d $testfile) then
 34    echo $testfile is directory
 35 else
 36    echo "$testfile is not plan_file and directory"
 37    echo "$testfile is special file"
 38 endif

output

for - each 

C Shell에서는 반복을 위해 foreach ~ end 구문을 사용합니다. 제시된 worlist의 개수만큼 반복하는데요. 매 iteration마다 wordlist에 있는 다음 단어를 name에 할당하며 Command를 수행합니다. wordlist는 변수들의 리스트/집합 변수를 사용할 수 있습니다. 

foreach name ( wordlist )
   command(s)
   . . .
end

 

마찬가지로 File과 관련된 예제 코드를 작성해보겠습니다. 아래의 Shell Script는 인자로 입력받은 경로에 존재하는 폴더 개수와 파일 개수를 세는 동작을 합니다. 

  1 #!/bin/csh
  2 # Usage : numfile [directory]
  3
  4 if ($#argv == 0) then
  5    set dir = "."
  6 else
  7    set dir = $argv[1]
  8 endif
  9
 10 if (! -d $dir) then
 11    echo $0\: $dir not a directory
 12    exit 1
 13 endif
 14
 15 echo -n $dir\:
 16 @ fcount = 0
 17 @ dcount = 0
 18
 19 cd $dir
 20 foreach file (*)            # (*) = (`ls`)
 21    if (-f $file) then
 22       @ fcount++
 23    else if (-d $file) then
 24       @ dcount++
 25    endif
 26 end
 27
 28 echo $fcount files $dcount directories

output

 

감사합니다. 

728x90
반응형

'Linux' 카테고리의 다른 글

[Linux] 파일 검색  (1) 2024.03.26
[Linux] Process  (0) 2024.03.26
[Linux] C Shell Script - Operator  (0) 2024.03.26
[Linux] C Shell Script - 사용자 입력, 인자  (0) 2024.03.26
[Linux] C Shell Script - 변수  (0) 2024.03.26

let textNodes = document.querySelectorAll("div.tt_article_useless_p_margin.contents_style > *:not(figure):not(pre)"); textNodes.forEach(function(a) { a.innerHTML = a.innerHTML.replace(/`(.*?)`/g, '$1'); });