고급 Bash 스크립팅 가이드 

 

고급 Bash 스크립팅 가이드

본 튜토리얼은 여러분이 Bash에 대해서 어떠한 사전 지식도 없다고 가정을 합니다만, 금방 중/고급 수준의 명령어들을 소개합니다(...유닉스의 슬기롭고 교훈적인 부분들을 배워 나가면서). 이 문

wiki.kldp.org

이렇게 아름다운 글을 보고 있으니 몸 둘 바를 모르겠다. 정리를 매우 잘했다. 날짜를 보니 2001년 자료였다. 아련한 시간이다. 2001년으로 돌아간다면 나는 리눅스를 공부하고 c언어를 공부할 것 같다. 

Bash shelll 자료가 아주 좋다. 원 저작자는 따로 있었는데, 그 사람의 원본 주소를 들어가니 광고가 나왔다. 본문의 원 저작자는 사라진 것으로 보인다. 

시간 있을 때 본문 내용을 차근차근 읽어보면 도움이 클 것 같다. 

Posted by 뭔가느낌이
,

find 명령어는 Unix 시스템에서 사용할 수 있는 쉘명령어 입니다.

Unix/LInux 또는 맥킨토시에서 사용할 수 있습니다. bash shell(/bin/bash)

$ bash --help
GNU bash, version 4.4.23(1)-release-(x86_64-pc-msys)
Usage:  bash [GNU long option] [option] ...
        bash [GNU long option] [option] script-file ...

find명령어 실제 사용 방법을 알아보자.  

$ find .  : 현재 폴더와 하위 폴더 모든 정보를 출력한다. 콤마를 한 칸 띄고 적는다.

$ find . -name "*.pdf"  : 명령어 입력하는 폴더를 기준으로 하위 폴더 포함하여 검색한다. pdf 확장자 파일을 찾는다.

$ find . -name "*.pdf"  > pdfOut.txt : 검색 결과를 문서파일로 저장한다. 문서파일에 그대로 검색 결과를 저장한다.

$ find . | grep text.txt : 파이프'|'는 키보드 엔터키 위에 있다. 결과를 넘겨준다. 

$ find . -name "*.txt" | xargs grep "Hello" | less : 문서에서 "Hello"를 찾는다. 한 화면씩 보여준다.

$ find . -name "*.txt" -exec rm {} \;    : 검색한 결과 파일을 지운다. 조심해야하지요.

$ find . -maxdepth 2 -name '*.txt'  : 폴더 깊이를 2단계로 제한하여 검색한다.

find 명령어 정말 다양하게 사용가능합니다.

$ find . -name '*good*' : 파일 이름에 위치 상관없이 good 표기한 파일 검색

$ find . -name "test*" -type d : 디렉토리를 찾으려면 -type d 를 이용한다.

$ sudo find / -size +10M -exec ls -lh {} \;     : 용량을 지정해줄 수 있다. sudo로 권한문제해결.

$ find / -name "test*" 2>/dev/null :  권한 오류를 회피할 수 있다.

$ find . -empty : 빈파일을 찾는다.

$ find . -name "* *" -exec rm -f {} \;    : 공백이 있는 파일들 지웁니다. "* *" 공백을 의미하죠.

 

 

find(1) — Linux manual page

 

Posted by 뭔가느낌이
,

write() 함수로 세자리 숫자 조합해서 출력하기

write()함수는 간단합니다. 첫번째 인자로 0,1,2 중에 하나를 입력합니다. 0 :표준입력, 1:표준출력, 2:표준오류 입니다. 화면 출력을 하려면 1을 지정합니다. 두번째 인자는 데이터 첫 주소값 입니다. 세번째 인자는 사용하려는 바이트의 수입니다.

#include <unistd.h>
         size_t write( int fildes, const void *buf, size_t nbytes );

#include <unistd.h>

void	ft_print_comb(void)
{
	char numArr[3];
	char separator[2];

	numArr[0] = '0';
	separator[0] = ',';
	separator[1] = ' ';
	while (numArr[0] <= '7')
	{
		numArr[1] = numArr[0] + 1;
		while (numArr[1] <= '8')
		{
			numArr[2] = numArr[1] + 1;
			while (numArr[2] <= '9')
			{
				write(1, numArr, 3);
				if (numArr[0] != '7' || numArr[1] != '8' || numArr[2] != '9')
				{
					write(1, separator, 2);
				}
				++numArr[2];
			}
			++numArr[1];
		}
		++numArr[0];
	}
}

int main(void){
ft_print_comb();

  return 0;
}

하나씩 첫번재 배열 값보다 크게 지정하면 숫자가 겹치지 않은 조합수를 만들 수 있어요. 

0 1 2  /  0 1 3 / 0 1 4 ...  6 7 8 / 6 7 9 / 6 8 9 / 7 8 9

복잡하게 보이지만 충분히 이해할 수 있는 수준의 코드입니다.

Posted by 뭔가느낌이
,