내가 한 노력들

[ Linux ] Shell script (3) 본문

IT 공부/Linux

[ Linux ] Shell script (3)

JONGI-N CHOI 2021. 6. 3. 15:24

 

Function

#!/bin/bash
echo "$0 $@ $1 $#" 
say_hello() { echo "Hello $0 $@ by $2!! ($#)" } 
say_hello "jade" "jeon" $1

 

위의 코드에서는 say_hello함수를 정의했고 그 아래에서 호출을 하고 매개변수를 보낸 코드

$0는 명령어

$1는 첫번째 매개변수

$@는 모든 매개변수를 출력

$#는 모든 매개변수의 숫자

./sa.sh로 파일을 실행시켰을 경우 (매개변수가 없는 경우)

$0 : 실행시킨 명령문 ./sa.sh

$1 : x

$@ : x

$# : 0

 

./sh.sh aaa로 실행시켰을 경우 (매개변수가 1개 aaa)

$0 : 실행시킨 명령문 ./sa.sh

$1 : aaa

$@ : aaa

$# : 1

 

IFS

Unix 운영 체제의 많은 명령 줄 인터프리터에서 입력 필드 구분자 변수는 일부 작업에 대해 패턴을 토큰으로 분리하는 데 사용되는 문자를 정의하는 변수를 나타냅니다.

 

#!/bin/bash
echo "IFS=${IFS}."
PRE_IFS=$IFS 

IFS=

for i in `ls -al`; do 
  echo $i | awk '{print $1 " " $9}'
  echo "IFS=${IFS}."
done

IFS=$PRE_IFS

 

IFS는 환경변수인데, 기본은 공백을 기준으로 토큰으로 분리하는데 개행을 기준으로 분리하기 위해서 위의 코드에 IFS = 다음 개행을 준것이다.

 

IFS는 환경변수이기 때문에 마음대로 변경시키면 좋지 않기 때문에

PRE_IFS=$IFS 기본 IFS값을 변수에 넣어 놓고

코드가 종료한 시점에서는 IFS=$PRE_IFS으로 다시 원래 설정으로 변경하는 것이다.

 

AWK

awk는 파일로부터 레코드(record)를 선택하고, 선택된 레코드에 포함된 값을 조작하거나 데이터화하는 것을 목적으로 사용하는 프로그램입니다

 

 

 

왼쪽은 ls -al로만 한것, 오른쪽은 awk을 이용해서 첫번째열인 protection에 관련된 내용만 보기위해서 한 것이다.

 

#!/bin/bash
PRE_IFS=$IFS 
IFS=

for i in `ls -al`; do
  S=`echo $i | awk '{print $5}'` 
  F=`echo $i | awk '{print $9}'`
  if [ "$F" == "." ] || [ "$F" == ".." ]; then
    continue 
  fi 
  
  echo "$S $F" 
done 

IFS=$PRE_IFS

 

위의 출력결과를 보면 "." , ".."의 결과까지 나오기 때문에 그 결과를 IF을 이용해서 제외하기 위한 코드이다.

 

 

결과를 보면 파일명에 "."와 ".."를 제외한 결과, 파일의 크기와 파일의 이름만 출력된 것을 확인할 수 있습니다.

 

 

 

참고문헌

https://www.youtube.com/watch?v=035pZp2R50M&list=PLEOnZ6GeucBVj0V5JFQx_6XBbZrrynzMh&index=9&ab_channel=%EC%8B%9C%EB%8B%88%EC%96%B4%EC%BD%94%EB%94%A9indiflex%EC%8B%9C%EB%8B%88%EC%96%B4%EC%BD%94%EB%94%A9indiflex