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을 이용해서 제외하기 위한 코드이다.
결과를 보면 파일명에 "."와 ".."를 제외한 결과, 파일의 크기와 파일의 이름만 출력된 것을 확인할 수 있습니다.
참고문헌
'IT 공부 > Linux' 카테고리의 다른 글
Centos 환경에서 Nginx 서버 구동하기 (0) | 2021.10.05 |
---|---|
[ Linux ] Shell Script(4) and Cron(scheduler) (0) | 2021.06.04 |
[ Linux ] shell script (2) (0) | 2021.06.02 |
[ Linux ] shell script기초(1) (0) | 2021.06.01 |
[ Linux ] 쉘 스크립트 이용해서 자동으로 명령 실행 (0) | 2021.05.31 |