echo 문에서 특수 문자를 그대로 출력하기 위해서는 \\를 이용합니다.예를 들어, 아래와 같이 $USER로 입력하게 되면 USER라는 환경 변수의 값이 출력됩니다.여기서 $ 앞에 \\를 붙여주게 되면 특수문자 $가 그대로 출력됩니다.
리눅스 또는 스크립트에서 환경 변수를 사용하기 위해서는 환경 변수 앞에 $를 붙여줍니다.리눅스에서 set 명령어를 입력하면 환경 변수의 전체 목록을 출력합니다.이 중에서 사용자명과 관련된 환경 변수 값을 출력하고 싶다면, 아래와 같이 명령합니다.한편, ${변수명} 형식
스크립트 내에서 리눅스 명령어의 결과값을 사용해서 원하는 기능을 구현하고 싶다면 $(리눅스 명령어)로 사용할 수 있습니다.아래와 같이 스크립트를 작성하고 실행해봅니다.date 리눅스 명령어는 현재 날짜와 시간을 출력합니다. date 명령어의 결과값을 today 변수에
사용자 변수는 아래와 같은 형식으로 사용할 수 있습니다.변수의 자료형은 할당되는 값에 따라 자동으로 결정됩니다.스크립트 내에서 변수를 참조할 때는 $변수명 또는 ${변수명}의 형식을 이용합니다.사용자 변수를 사용할 때는 아래와 같은 유의사항이 있습니다.변수, 등호, 값
출력 리다이렉트의 형식은 아래와 같습니다.출력 리다이렉트의 경우 명령으로 입력한 파일이 없을 경우 자동으로 생성하고 파일에 명령어의 출력 내용을 저장합니다.\>를 쓰면 내용이 덮어씌워지고,\>>를 쓰면 내용이 기존 내용에 추가됩니다.입력 리다이렉트의 방식 중 파일의 내
bash 수학 연산(expr, $\[])은 정수 연산만 지원합니다.부동소수점 연산은 bc 명령어를 이용할 수 있습니다.리눅스 커맨드 라인에서 수식을 계산할 때 사용하는 명령어는 expr입니다.표준 연산자(+, /, -)의 경우는 계산이 에러 없이 잘 처리되지만, 곱셈(
쉘에서 실행되는 모든 명령은 종료 상태(exit status)를 반환합니다.종료 상태는 $?를 이용해 확인할 수 있습니다.예를 들어, 정상적으로 명령을 실행한 후에 echo $?를 통해 종료 상태를 출력해볼 수 있습니다.아래는 종료 상태 코드에 대한 표준 규칙입니다.0
스크립트에서 사용하는 조건문에는 if-then 구문이 있습니다.스크립트에서 사용하는 if-then 구문은 아래와 같은 형식으로 작성합니다.작동 방식은 다음과 같습니다.if 뒤에 오는 명령문(command)을 실행하고, 명령문의 종료 상태를 반환합니다.종료 상태가 0이면
조건문에서 가장 많이 사용하는 형식은 숫자 비교입니다.
쉘 스크립트에서 두 문자열을 비교하는 방법입니다. (s1, s2는 문자열)유의할 점은 두 문자열이 큰지 작은지를 비교할 때 그냥 < 또는 >로 쓰면 리다이렉트로 인식합니다.그래서 반드시 \\를 붙여줍니다.\-n s1 활용 방법\-z s1 활용 방법한편, 조건에 단
쉘 스크립트에서는 파일과 관련한 조건문을 작성할 수 있습니다.location 변수에 디렉토리까지의 경로를 할당합니다.location 변수값의 경로가 디렉토리이면 디렉토리 내에 test 파일이 있는지 따져봅니다.test 파일이 있다면, 해당 파일에 >> 출력 리다이렉트를
이중 괄호와 이중 대괄호를 이용해 수식과 문자열에 대한 계산을 수행할 수 있습니다.이중 괄호 안에 수식을 쓰면 수식이 계산됩니다.\*\*는 제곱을 의미합니다.이중 괄호를 이용하면 if문에서 -gt, -le 와 같은 가독성이 떨어지는 숫자 비교 대신 기호를 활용할 수 있
if문의 조건문은 AND(&&), OR(||)을 이용해서 두 가지 이상의 조건문을 검사할 수 있습니다.&& 활용하기|| 활용하기
파일의 최신(수정도 포함) 여부를 비교하는 구문은 -nt, -ot가 있습니다.비교 구문 | 설명...|...file1 -nt file2 | file1이 file2 보다 최신 파일인지file1 -ot file2 | file1이 file2 보다 오래된 파일인지
여러 패턴이 동일한 명령어를 수행하도록 하고 싶다면 |를 이용합니다.
for문의 반복 파라미터로 문자열이 온다면 띄어쓰기를 기준으로 반복됩니다.for문을 이용할 때 문자열을 띄어쓰기를 기준으로 반복시킬 수 있습니다.특수 문자가 들어간 경우,문자열 2개를 묶고 싶을 경우,큰따옴표(")를 이용해 감싸주어 구분합니다.
먼저 states라는 파일을 만들고 아래의 내용을 입력합니다.그리고 states 파일의 내용을 띄어쓰기를 기준으로 반복하며 출력해보겠습니다.
스크립트에서 문자열을 덧붙이고 싶을 때 사용하는 트릭입니다.
각 데이터를 어떤 것을 기준으로 구분할 것인가 : IFSIFS(Internal Field Separator)는 특수한 환경 변수로 bash 쉘이 필드 구분자로 사용하는 문자의 목록을 정의합니다.기본값은 빈 칸입니다.그래서 아래와 같이 states 파일의 내용을 작성하고
와일드카드를 이용해 디렉토리 내의 파일 리스트를 for문을 이용해 순서대로 조회할 수 있습니다.아래의 형식을 통해 파일 경로 내의 파일들을 하나씩 조회할 수 있습니다.이를 활용해서 해당 파일 경로 내의 파일을 하나씩 조회하면서파일/디렉토리의 경우를 분류해서 echo 처
스크립트에서는 이중 괄호를 이용해 for문을 사용할 수 있습니다.스크립트에서는 수식을 계산할 때 또는 비교 조건문에서 등호를 사용하기 위해 이중 괄호를 사용합니다.for문에서도 역시 이중 괄호를 사용하여 C언어 방식으로 사용할 수 있습니다.
for문의 인덱스 변수는 여러 개를 사용할 수도 있습니다.아래와 같이 쉼표(,)로 구분해 여러 개의 인덱스 변수를 사용할 수 있습니다.
while문은 뒤에 나오는 조건문이 참이면 do~done 사이의 명령어를 실행하는 반복문입니다.while 문에 여러 명령을 사용할 수도 있습니다.가장 마지막 명령이 반복이 종료하기 위해 검사하는 조건문입니다.출력을 보면 마지막에 var1이 0일 때,echo $var1이
until문은 while문과 반대로 조건이 거짓일 때 do~done 사이의 명령어를 반복합니다.예를 들어, 인덱스 변수가 0이 되기 전까지 계속 반복하는 스크립트를 작성하면 아래와 같습니다.
내부 필드 구분자인 IFS를 적절히 정의해서 /etc/passwd의 정보를 파싱해서 한 줄 씩 출력해봅시다.먼저 /etc/passwd의 내용을 살펴봅시다.위와 같이 각 사용자가 줄바꿈을 기준으로 구분되어 있고,사용자 정보는 :을 기준으로 구분되어 있습니다.각 사용자 별
break : break를 읽은 시점에서 바로 break가 속해 있는 반복문을 종료continue : continue를 읽은 시점에서 그 아래로의 코드는 생략하고 다음 반복 진행예를 들어, 0부터 10까지 커지는 인덱스 내에서 인덱스가 5일 때 각각 break와 con
break는 break가 속해 있는 반복문을 종료합니다.j = 2일 때, break를 만나면 j를 돌리는 for문이 완전히 종료되어 뒤에 j = 3, 4의 경우를 실행하지 않습니다.바깥의 i를 돌리는 for문에는 영향이 전혀 없습니다.하지만 여기서 바깥쪽 i를 돌리는
반복문의 출력값을 새로운 파일에 기록하기 위해서는 done 옆에 리다이렉트를 수행하면 됩니다.특정 폴더 밑의 모든 파일들을 하나씩 조회하면서 해당 파일이 디렉토리인지 파일인지 알아보는 스크립트를 작성했습니다.스크립트를 실행하면 echo문에 대한 출력이 나오지 않습니다.
반복문의 출력값에 파이프를 이용할 수 있습니다.반복문의 done 옆에 파이프를 이용할 수 있습니다.반복문의 출력값을 그대로 전달받아 파이프 뒤의 명령을 실행합니다.위의 스크립트를 보시면 정렬되어 있지 않은 문자열 E B D A C F이 인덱스로 입력되었을 때 for문을
리눅스 시스템에서 사용할 수 있는 실행 파일들의 목록을 출력해보는 예제 스크립트입니다.커맨드라인에서 프로그램을 실행하면 리눅스 시스템은 실행 파일을 찾기 위해 $PATH 환경 변수에 정의 된 경로를 탐색합니다.내용을 보면, :을 통해 각 경로들이 구분되어 있는 것을 볼
입력 리다이렉션을 이용해 여러 명의 사용자에 대한 정보가 적힌 파일을 입력받아 사용자를 한 번에 생성해보는 코드 실습을 해보겠습니다.먼저 users.csv라는 파일에 사용자에 대한 정보들을 입력합니다.(쉼표를 기준으로 userid, name입니다)스크립트의 내용은 아래
파일에 적힌 내용을 입력 리다이렉션을 통해 반복문에서 어떻게 다루는지 알아봅시다.users.csv 파일에는 아래의 내용이 적혀 있습니다.이 파일의 내용을 ,를 기준으로 구분해 각각 한 줄씩 조회하고 싶다면 아래와 같이 입력 리다이렉션을 이용할 수 있습니다.코드 리뷰do
스크립트 파일을 실행할 때 매개변수를 함께 주어 스크립트 파일에서 매개변수를 사용할 수 있도록 하는 방법에 대해 알아보겠습니다.스크립트의 내용에서 $n은 스크립트 파일을 실행할 때 n번째 매개변수(parameter)를 의미합니다.예를 들어 아래의 스크립트를 작성하고,
$$$ ./test1 A B C D Eparameter count : 5$ cat test1echo "parameter count : ${!$ ./test1 A B C D Eparameter count : E$ ./test1parameter count : ./test1
스크립트 파일에는 매개변수 $n을 넣고,파일을 실행할 때 매개변수와 함께 실행하지 않는다면syntax error가 발생할 수 있습니다.이와 같이 매개변수를 할당하지 않아 발생하는 에러에 대한 예외처리를 진행해야 합니다.코드 리뷰\-n 비교 구문은 빈 문자열이 아니라면
매개변수가 $1부터 시작하는 이유는 $0이 스크립트 파일 이름을 가리키기 때문입니다.
$\*와 $@는 큰 차이가 있습니다.$\* : 모든 매개변수를 하나의 문자열로 가짐.$@ : 모든 매개변수를 필드로 구분된 단어들로 가짐.이 차이는 아래의 스크립트를 통해 실행시켜 보면 차이를 알 수 있습니다.코드 리뷰$\*와 $@는 큰따옴표가 씌워져 있습니다.큰따옴표
매개변수가 얼마나 많은지 모를 때 매개변수를 하나씩 조회하면서 사용하고 싶다면 shift를 이용해 볼 수 있습니다.스크립트가 shift 명령어를 만나면 커맨드라인 매개변수를 앞으로 차례대로 한 칸씩 당깁니다.즉 $3 -> $2가 되고,$2 -> $1가 되며,기존의 $1
Q. 줄의 개수를 입력하면 그 수의 크기만큼 속이 빈 직각삼각형을 만드세요.예시) 5를 입력예시) 10을 입력위 문제는 3가지 규칙이 존재합니다.각 라인의 첫 번째 열에 \*이 표시됩니다.각 라인의 마지막 열에 \*이 표시됩니다.라인의 마지막 줄은 라인 넘버만큼 \*이
쉘 스크립트 파일을 실행할 때 옵션 기능을 구현하는 방법에 대해 실습해봅시다.우리가 만든 쉘 스크립트 파일을 하나의 명령어를 실행한다고 생각해봅시다.파라미터로 옵션을 주게 되면 해당 옵션에 대한 기능을 실행할 수 있도록 쉘 스크립트를 작성해 보는 실습을 진행해 보겠습니
앞서 getopt를 이용한 옵션 기능 구현 방법에 대해 알아보았습니다.이번에는 getopts를 이용하는 방법에 대해 알아봅시다.getopts는 getopt와 사용 형식이 약간 다릅니다.getopts는 커맨드라인의 매개변수를 차례대로 variable에 담아 처리합니다.따
커맨드라인에서 데이터를 입력 받기 위해선 read 명령을 이용합니다.앞서 echo -n을 통해 입력 라인에 문자열을 함께 출력했지만,read 자체적으로 -p 옵션을 이용하면 이 기능을 동일하게 수행할 수 있습니다.\-t <second>를 이용하면 해당 시간이 지났
파일의 내용을 read를 이용해 입력 받을 수 있습니다.test 파일의 내용을 한 줄씩 입력 받아 출력해봅시다.코드리뷰cat test로 출력된 파일 내용을 |로 read의 파라미터로 보냅니다. 그럼 line에 cat test 내용이 들어가게 됩니다.for와 IFS를 이
오류에 대해서 리다이렉션을 수행할 수 있습니다.예를 들어, 아래와 같이 리다이렉션 처리를 하면 파일이 존재하지 않아 에러가 발생하는데, 에러 메시지는 리다이렉션이 작동하지 않는 것을 볼 수 있습니다.이렇듯 기존의 출력 리다이렉션 방식으로는 에러 메시지를 리다이렉트 할
쉘 스크립트에 출력 리다이렉션을 작성할 때, 출력 리다이렉션을 특정 파일 디스크립터에 하고 싶다면 \>&<파일 디스크립터 번호>의 형식으로 입력합니다.이때 기호 뒤에 파일명을 적어주지 않습니다.이렇게 작성하면 나중에 스크립트 파일을 실행할 때,특정 파일로 해당 파
스크립트 파일에서 입력 리다이렉션을 사용하는 방법에는 여러가지가 있습니다.exec를 활용하면 스크립트 파일 내에서 다른 파일의 내용을 입력 리다이렉션 할 수 있습니다.먼저 아래와 같이 test 파일을 작성하고,아래의 스크립트를 작성하고 실행합니다.
사용자 정의 리다이렉트를 만들어봅시다.기본적으로 파일 디스크립터는 0~8까지 존재하고, 3~8에 대해서 사용자 정의 리다이렉션을 정의할 수 있습니다.&<파일 디스크립터>는 해당 파일 디스크립터가 출력되는 장소를 나타냅니다.exec 3>&1로 되어 3번 파일 디스크
3~8번 파일 디스크립터에 입력 파일 디스크립터를 만들어봅시다.파일로부터 내용을 입력받는데, 3~8번 파일 디스크립터를 이용하는 방법에 대해 알아보겠습니다.아래의 코드를 봅시다.코드 리뷰exec 6<&0과 exec 0<test
lsof -a -p $$ -d 0,1,2 명령을 이용해 파일 디스크립터에 대한 정보를 볼 수 있습니다.\-p $$ : -p는 프로세스 ID를 지정하는 옵션입니다. $$는 현재 PID를 의미하는 환경 변수입니다.\-d 옵션 뒤의 파라미터는 조회하고 싶은 파일 디스크립터의
쉘 스크립트에서 명령에 대한 출력을 나타내지 않게 하기 위해서는 /dev/null을 이용합니다.스크립트의 출력을 모두 표시하고 싶지는 않을 수도 있습니다.예를 들어, 백그라운드에서 프로세스를 실행하는 동안 스크립트에서 소소하고 귀찮은 오류가 생길 때 이러한 오류에 대해
/tmp 디렉토리는 리눅스 시스템의 임시 파일을 저장하는 공간입니다. 리눅스는 시동할 때 /tmp 디렉토리에 있는 파일을 자동으로 제거하도록 시스템을 구성합니다.mktemp 명령으로 현재 경로에 임시 파일을 만들어 보겠습니다.반드시 <파일이름>.XXXXXX의 형식
출력을 모니터와 파일에 모두 보낼 때 출력을 두 번 리다이렉트하는 대신 tee 명령을 사용할 수 있습니다.파이프 명령과 함께 사용하면 유용하게 사용할 수 있습니다.보시는 바와 같이 모니터에도 출력하고 파일에도 내용이 저장된 것을 확인할 수 있습니다.기본적으로 아무 옵션
.csv 파일은 스프레드시트에서 데이터를 내보낼 때 사용하는 파일 형식입니다.아래와 같은 유저 데이터 csv 파일이 있습니다.이 csv의 유저 데이터를 가지고 MySQL 데이터베이스에 레코드를 삽입하는 INSERT 쿼리를 작성해서 .sql 파일로 저장하는 예제를 수행해
리눅스는 시스템에서 실행되는 프로세스와 통신하기 위해 신호를 사용합니다.프로세스를 중지, 시작, 종료하기 위해 이러한 신호를 사용합니다.기본적으로, BASH 쉘은 SIGQUIT(3) 및 SIGTERM(15) 신호를 받았을 때는 이를 무시합니다.SIGHUP(1) 신호를
백그라운드에서 실행하는 방법은 간단합니다.스크립트를 실행할 때 뒤에 & 기호만 붙여주면 됩니다.대괄호 안의 숫자는 작업 번호입니다.뒤의 숫자는 프로세스 ID(PID)입니다.PID는 프로세스마다 고유값을 가집니다.프로세스가 완료되면 작업 번호, Done, 실행 명령이 표
터미널 세션을 종료한 후에도 백그라운드 스크립트의 작업을 유지시키고 싶다면 nohup 명령을 이용합니다.nohup은 프로세스와 터미널의 관계를 끊습니다.그래서 STDOUT과 STDERR이 터미널에 나타나지 않습니다.대신, 현재 경로에 nohup.out이라는 파일이 생성
쉘이 처리하고 있는 현재의 작업을 볼 수 있습니다.작업의 내용은 중단된 작업까지 모두 보여줍니다.\-l 옵션을 붙이면 프로세스 ID(PID)를 볼 수 있습니다.작업 목록의 작업 번호 옆에는 +와 -가 있습니다.\+ : 기본 작업(1개에만 붙음)\- : 기본 작업의 처리
백그라운드 모드에서 중단된 작업을 다시 시작하는 명령어입니다.여기 중단된 프로세스가 있습니다.bg 명령을 수행하면 다시 시작됩니다.기본적으로 bg 명령만 단순히 수행하면 +가 붙은 기본 작업에 대해서만 재시작됩니다.아래의 형식으로 명령을 수행하면 +가 붙지 않은 추가
프로세스를 실행할 때 리눅스 커널은 각 프로세스에 CPU를 할당합니다. 이때 스케줄링 우선순위가 존재합니다.우선순위는 -20 ~ +19의 범위로 정해지고, 숫자가 낮을 수록 우선순위가 높다는 의미입니다.쉘은 기본적으로 모든 프로세스를 스케줄링 우선순위 0으로 실행합니다
리눅스 시스템이 스크립트를 실행할 시간을 지정할 수 있습니다.비슷한 기능을 하는 cron이 있지만,1회성 작업을 할 때는 at이 훨씬 편리합니다.at의 데몬이 atd는 리눅스가 시동될 때 자동으로 시작하는 데몬입니다.기본적으로 백그라운드에서 실행되며, /var/spoo
crontab -e를 처음 실행하면 에디터 설정이 나옵니다.이 설정을 이후에 변경하고 싶다면 select-editor를 명령합니다.이후 crontab -e을 실행하면 vim 에디터로 열리는 것을 확인할 수 있습니다.
crontab으로 매달 마지막 날을 지정하는 법에 대해 생각해보신 적이 있나요?월마다 마지막 날은 30, 31 등이 있을 수 있어 고정적이지 않습니다.crontab을 사용할 때 매달 마지막 날에 실행되도록 하려면 어떻게 해야 할까요?먼저 crontab 편집창을 열고아래
cron을 사용할 때 불편한 점은 리눅스 시스템이 꺼졌다가 다시 켜졌을 때 놓친 작업은 실행되지 않는다는 것입니다.이를 해결할 수 있는 것이 바로 anacron입니다.anacron은 예약된 실행을 놓친 작업이 있는지 판단하고 될 수 있는 대로 빨리 작업을 소급 실행합니
새로운 로그인 또는 새로운 쉘을 시작할 때 홈 디렉토리의 .bashrc 파일을 실행합니다..bashrc 파일에 특정 명령, 스크립트 파일을 추가하면 새로운 쉘을 시작할 때마다 그 명령이 실행되도록 할 수 있습니다.아래와 같이 .bashrc 파일 끝에 echo문을 추가해
2022-05-24 날짜를 기준으로 khyup 계정에 설정된 만료 기간만큼 만료일을 늘립니다.khyup 계정의 패스워드 만료 기간을 90일로 변경합니다.\-M99999 : 패스워드가 영원히 만료되지 않도록 설정.
오늘 날짜를 기준으로 계정에 디폴트로 설정된 만료 기간 120일로 패스워드 만료 갱신만료 기간이 never 계정의 경우 생략(ex: root, daemon ...)
AWS의 EC2 인스턴스 리스트를 구글 시트에 정리하면서 업데이트 시 인스턴스의 어떤 부분에서 업데이트가 발생했는지 쉽게 알 수 있도록 하기기존에 서버가 running 상태였다가 stopped 상태로 바꼈다면 스크립트를 실행 시 아래와 같이 나타납니다.\-: 삭제된 내
쉘 스크립트에서 함수는 아래와 같은 형식으로 만들 수 있습니다.함수를 호출할 때는 함수의 이름을 입력하면 됩니다.(파라미터가 있을 경우 괄호 안에 파라미터를 함께 넣어 호출합니다)함수가 정의되고 난 이후에 함수 사용이 가능합니다.(함수가 정의되기 전에 함수를 호출할 경
놀랍게도 쉘 스크립트에서 함수 내에 사용하는 return의 기본 용도는 함수의 종료 코드 반환입니다.쉘 스크립트 내에 비정상적인 종료를 알아보기 위해 종료 코드를 조회할 수 있는데, 0이 아닌 종료 코드가 발생했을 때 이것이 함수 내에서 발생한 오류인지 함수 밖에서 발
쉘 스크립트에서는 함수 내에서 발생하는 출력을 변수에 담을 수 있습니다.다른 프로그래밍 언어에서 return의 역할을 echo가 수행하고,함수를 호출하면서 특정 변수에 할당합니다.그리고 변수를 출력하면 \[변수] -> \[함수] -> \[echo] 순으로 참조해 결과를