Page tree

Contents


자꾸 까먹어서 정리


For loop 사용

문법

for VARIABLE in 1 2 3 4 5 .. N
do
	command1 ${VARIABLE}
	command2 ${VARIABLE}
	commandN ${VARIABLE}
done

in 뒤에 조건문에는 $(COMMAND) 구문으로 명령어 실행 결과를 넣을 수 있음.

세 번 수행하면서 변수 출력

$ for i in 1 2 3;do echo $i;done


외부 명령어 결과 출력

$ for i in $(ls);do echo $i;done


{START..END..INCREMENT} 구문 사용

{ } 구문으로 루프의 조건을 지정할 수 있음. INCREMENT 를 생략할 경우 1 로 설정됨.

1에서 5 까지 출력
for i in {1..5}
do
   echo "Welcome $i times"
done


INCREMENT 지정

1, 3, 5 세 번 실행

1에서 5 까지 출력
for i in {1..5..2}
do
   echo "Welcome $i times"
done


Runtime Parameter 처리

파라미터의 갯수(argc) 는 $# 변수에 담기며 개별 파라미터(argv)는 $숫자 에 저장됨.

$0 은 프로그램 이름(쉘 스크립트명)이 저장되며 $1 부터 파라미터가 저장.

#!/bin/bash


echo "Total Param= $#,  PROG: $0, param1 = $1, param2 = $2";


bash 는 args 배열에 파라미터를 저장하므로 처리가 용이

param.sh
#!bin/bash

## 파라미터가 없으면 종료 
if [ "$#" -lt 1 ]; then
    echo "$# is Illegal number of parameters."
    echo "Usage: $0 [options]"
	exit 1
fi
args=("$@")

## for loop 를 파라미터 갯수만큼 돌리기 위해 three-parameter loop control 사용
for (( c=0; c<$#; c++ ))
do
    echo "$c th parameter = ${args[$c]}";
done


실행 결과

$ ./param.sh
0 is Illegal number of parameters.
Usage: ./p.sh [options]
 
$ ./param.sh first second third
0 th parameter = first
1 th parameter = second
2 th parameter = third


getopt

option 처리 라이브러리인 getopt 가 내장되어 있으므로 런타임 파라미터 작성시 사용하면 가독성에 많은 도움이 됨

 Click here to expand...


compare oper

-eq, -lt 등의 연산자는 integer 비교만 가능하고 문자열 비교는 ==, != 사용

if [ "$a" == "OK" ];then
	//doit
fi


조건문(if-else,elif)

if 문

 ] 안에 test 조건을 넣을 수 있음.

Arithmetic tests

-eq, -ne 등의 연산자 사용 가능

$var 가 0 인지 확인
if [ $var -eq 0 ];then
  echo "\$var is 0";
else
  echo "\$var is not 0";
fi


File test

-d(디렉터리 여부), -f(파일 존재) 등 파일 조건 검사 가능

## /etc/nginx/sites-available/ 디렉터리가 없으면 생성
if [ ! -d "/etc/nginx/sites-available/" ];then
    mkdir /etc/nginx/sites-available/
fi


String test

-z(문자열이 empty), -n(문자열이 none empty) 등

## $var 문자열이 공백인지 검사
if [ -z $var ];then
    echo "\$var is empty";
fi

if 문 안의 이중 대괄호( [[  ]])

bash(ksh, zsh 포함)  의 확장 기능으로   [] 에 비해 다양한 연산자를 사용할 수 있음

정규식

=~ 로 정규식 사용 가능.

#!/bin/bash -x

line='  abcde fg'

if [[ $line =~ [[:space:]]*(abc)?(de)* ]];then
        echo "${BASH_REMATCH[2]}"
fi

File 처리

외부 파일을 입력값으로 사용

파일을 라인별로 읽어서 입력값으로 사용

#!/bin/sh

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
done < "$1"


Back ground 로 구동

bg 명령어로 백그라운드로 실행시 terminal 이 연결되어 있으므로 logout 하면 종료될 수 있다. 터미널과 연결을 끊어주는 nohup 명령어와 함께 표준입력과 표준 출력을 전환해 주면 로그아웃해도 의도한대로 백그라운드에서 작업이 수행된다.

nohup myprogram > foo.out 2> foo.err < /dev/null &


root 로 실행했는지 여부

EUID 환경 변수 체크

if [ "$EUID" -ne 0 ];then
  echo "Please run as root"
  exit
fi



같이 보기

  • No labels
Write a comment…