배열(Array) 개념 없는 프로그래밍 언어를 상상하기 어렵습니다. 각 언어마다 구현 방식은 다르지만, 배열은 서로 같거나 다른 데이터들을 하나의 상징적인 이름 아래 통합하여 관리할 수 있게 해주는 강력한 도구입니다.이 글에서는 셸 스크립팅 관점에서 배열 개념을 다루며, 배열을 활용한 다양한 셸 스크립트 예제를 통해 실전 감각을 익혀보겠습니다.배열 초기화와 사용 방법최신 버전의 bash는 1차원 배열을 지원합니다. 배열은 declare 셸 내장 명령어로 명시적으로 선언할 수 있습니다.declare -a var 하지만 위와 같이 배
백 마디 말보다 한 장의 그림이 더 많은 것을 말해 줍니다. 아래 그림은 리눅스(Linux)가 어떻게 작동하는지 한눈에 보여 줍니다. 함께 읽으면 좋은 글 셸 프로그래밍을 배우는 5가지 셸 스크립트 – 2부 리눅스 BASH 스크립팅의 세계 탐험하기 – 3부 리눅스 셸 이해하기 셸(Shell): 사용자를 운영체제와 연결해 주는 명령줄 해석기(Command-Line Interpreter)로, 명령어를 직접 실행하거나 텍스트 스크립트를 작성해 작업을 수행할 수 있게 해 줍니다. 프로세스(Process): 사용자가 시스
무언가를 배우려면 실패에 대한 두려움 없이 직접 해봐야 합니다. 저는 실습의 중요성을 믿기 때문에, 이번 글에서도 여러분과 함께 스크립팅 언어의 실전 세계로 들어가 보겠습니다. 이 글은 첫 번째 시리즈인 『리눅스 쉘과 기본 쉘 스크립팅 이해하기 – 파트 I』의 연장선입니다. 지난 시간에 맛보기로 스크립팅을 경험해 보셨다면, 이번 글에서도 실망시키지 않을 것입니다. 스크립트 1: 특수 패턴 그리기 사용자에게 5에서 9 사이의 숫자를 입력받아 다이아몬드 형태의 특수 패턴을 화면에 출력하는 스크립트입니다. 반복문과 조건문의 기본 개념을
direnv란 무엇인가?direnv는 Linux와 macOS 같은 UNIX 운영체제의 셸을 위한 오픈소스 확장 도구입니다. 단일 정적 실행 파일로 컴파일되며 bash, zsh, tcsh, fish 등 다양한 셸을 지원합니다.direnv의 핵심 목적은 프로젝트별 환경 변수를 관리하면서도 ~/.profile이나 기타 셸 시작 파일을 어지럽히지 않는 것입니다. 현재 디렉터리에 따라 환경 변수를 자동으로 로드하고 언로드하는 새로운 방식을 제공합니다.direnv는 SaaS(Software-as-a-Service) 애플리케이션 구축 방법론인
Marcel은 새로운 셸입니다. 여러 면에서 전통적인 셸과 비슷하지만, 몇 가지는 확연히 다른 방식으로 동작합니다: 파이프(Piping): 일반적인 셸은 한 명령의 출력을 다른 명령의 입력으로 전달할 때 텍스트를 파이프로 보냅니다. 반면 Marcel은 문자열 대신 구조화된 데이터를 파이프로 전달합니다. Python: Marcel은 Python으로 구현되었으며, 여러 방식으로 Python 기능을 제공합니다. 명령에 로직이 조금 필요하다면 Marcel 안에서 Python으로 자연스럽게 표현할 수 있습니다. 스크립팅: Marcel은 스
SSH(Secure Shell)는 원격 서버에 안전하게 접속해 명령어와 프로그램을 실행할 수 있도록 해주는 오픈소스 네트워크 프로토콜입니다. 또한 SCP나 rsync 명령어와 함께 사용하면 네트워크를 통해 컴퓨터 간 파일을 안전하게 전송할 수도 있습니다.[함께 읽으면 좋은 글: OpenSSH 서버 보안 강화 방법]SSH 키 기반 인증이 필요한 이유이 글에서는 RHEL 계열(CentOS, Fedora, Rocky Linux, AlmaLinux)과 Debian 계열(Ubuntu, Mint) 리눅스 배포판에서 SSH 키를 이용해 원격 리
셸 스크립트 작성은 모든 리눅스 사용자가 반드시 익혀야 할 핵심 기술 중 하나입니다. 셸 스크립트를 활용하면 한 줄씩 일일이 입력해야 하는 번거로운 반복 작업을 자동화할 수 있어 업무 효율이 크게 향상됩니다.이 글에서는 모든 리눅스 사용자가 알아두면 좋은 기본적인 셸 스크립팅 기법을 예제와 함께 단계별로 살펴봅니다.1. 간단한 셸 스크립트 만들기셸 스크립트는 ASCII 텍스트로 구성된 파일입니다. 텍스트 편집기를 사용하면 손쉽게 작성할 수 있으며, 명령줄 기반 편집기와 GUI 기반 편집기 모두 활용 가능합니다. 이 가이드에서는 vi
최근 셸 스크립트를 작성하던 중 Bash 특수 변수인 $$와 $BASHPID가 서로 다르게 동작한다는 점을 발견했습니다. 리눅스에서 실행되는 모든 프로세스에는 프로세스 ID(PID)가 할당되며, 운영체제는 바로 이 ID를 통해 각 프로세스를 식별하고 관리합니다. 현재 셸의 프로세스 ID 확인하기 마찬가지로 Bash 터미널 세션에도 고유한 프로세스 ID가 부여됩니다. 현재 셸의 프로세스 ID를 저장하는 특수 변수로 $$와 $BASHPID가 있는데요. 아래 명령어를 실행해 현재 셸의 프로세스 ID를 직접 확인해 보세요. 메인 셸에서는
이 글의 핵심 목표는 Bash에서 스크립트를 직접 실행하는 것과 source로 불러오는 것 사이에 어떤 차이가 있는지 명확하게 이해하도록 돕는 것입니다. 먼저, 스크립트를 호출하는 다양한 방식에 따라 프로그램이 어떻게 처리되는지부터 살펴보겠습니다. 참고: 스크립트를 만들 때 확장자를 붙이는 것은 필수가 아닙니다. 확장자가 없어도 스크립트는 문제없이 실행됩니다. 쉬뱅(Shebang)이란? 기본적으로 모든 스크립트는 쉬뱅(shebang, #!)이라는 라인으로 시작합니다. Bash에서 #(해시) 기호는 일반적으로 주석으로 해석되지만, s
Here document(Heredoc)는 하나의 특수한 코드 블록처럼 취급되는 입력값 또는 파일 스트림 리터럴입니다. 이 코드 블록은 명령어에 전달되어 처리됩니다. Heredoc은 UNIX 셸에서 유래했으며, sh, tcsh, ksh, bash, zsh, csh 등 주요 Linux 셸에서 사용할 수 있습니다. 나아가 Perl, Ruby, PHP 같은 프로그래밍 언어에서도 heredoc을 지원합니다. Heredoc의 기본 구조 Heredoc은 두 개의 꺾쇠 괄호 (<<)와 그 뒤에 오는 구분자(delimiter token
Bash 스크립트에서 파일을 읽는 작업은 프로그래밍에서 매우 흔하게 접하는 연산입니다. 이 글에서는 while 루프를 활용해 파일 내용을 읽는 여러 가지 방법을 살펴봅니다. 하나의 작업도 Bash에서는 다양한 방식으로 수행할 수 있지만, 그중에서도 효율적인 최적의 방법을 아는 것이 중요합니다. 상황에 맞는 기법을 선택할 수 있도록 각 방법의 특징과 동작 원리까지 자세히 설명하겠습니다. while 루프의 기본 구조 본격적으로 파일을 읽기 전에 while 루프가 어떻게 동작하는지 간단히 짚고 넘어가겠습니다. while 루프는 조건식을
bash 셸에서는 for, while, until 세 가지 루프 구문을 사용할 수 있습니다. 각 루프는 문법과 동작 방식에서 차이가 있지만, 공통적으로 특정 조건식을 평가하면서 코드 블록을 반복 실행한다는 목적을 가지고 있습니다. until 루프는 조건식이 거짓(false)으로 평가되는 동안 코드 블록을 계속 실행합니다. 이는 while 루프와 정반대의 동작 방식입니다. while 루프는 조건이 참(true)인 동안 코드를 실행하는 반면, until 루프는 조건이 거짓인 동안 실행됩니다. until 루프 기본 문법 until [ e
이 글에서는 Bash 스크립트에서 break와 continue 문을 사용하는 방법을 살펴보겠습니다. Bash에는 for, while, until 세 가지 주요 반복문 구조가 있으며, break와 continue는 Bash 내장 명령으로 반복문의 흐름을 변경하는 데 사용됩니다. 이 개념은 Python을 비롯한 널리 쓰이는 프로그래밍 언어에서도 동일하게 제공됩니다. $ type -a break continue break 문으로 반복문 종료하기 break 문은 현재 실행 중인 반복문을 즉시 빠져나가고, 제어를 반복문 바깥의 다음 문장으
Git은 무료로 누구나 사용할 수 있는 오픈소스 분산 버전 관리 시스템(Distributed Version Control System)입니다.현재 Git은 전 세계에서 가장 널리 사용되는 현대적인 버전 관리 시스템입니다. 2005년 Linux 운영체제 커널의 창시자로 유명한 리누스 토르발스(Linus Torvalds)가 처음 개발한 이후로 지금까지 활발하게 유지보수되고 있는 분산형 오픈소스 프로젝트입니다.SVN이나 CVS 같은 기존의 중앙집중식 버전 관리 시스템과 달리, Git은 분산형 구조를 채택하고 있습니다. 즉, 모든 개발자가
몇 시간에 달하는 지루한 반복 작업을 한 줄의 우아한 Bash 코드로 해결하는 것만큼 뿌듯한 일은 드뭅니다. 최근 Bash 스크립트로 노트북 환경을 자동으로 재구축하는 실험을 진행하면서, 새 머신에 GitHub 저장소들을 손쉽게 클론하는 방법이 필요했습니다. 여러 자료를 뒤진 끝에 이 작업을 수행하는 한 줄짜리 명령어를 완성했습니다. 그리고 ‘모든 계란을 한 바구니에 담지 않는다’는 정신으로, GitLab에 백업 저장소를 자동 생성하고 푸시하는 또 다른 원라이너도 만들었습니다. 바로 소개하겠습니다. GitHub 저장소 전체를 클론하
최근 Bash 스크립트로 Ubuntu를 설정하는 글에서 .bashrc의 마법에 대해 잠깐 언급한 적이 있습니다. 하지만 그 정도로는 부족했기에, 이번에는 Bash 설정 파일이 무엇을 할 수 있는지 좀 더 자세히 다뤄보려 합니다.제가 현재 사용 중인 설정은 워크플로우를 크게 개선해 주고, 설정 없이 입력해야 할 키 입력을 무려 50% 이상 줄여줍니다! 지금부터 별칭(alias), 함수(function), 프롬프트(prompt) 설정 예시를 통해 어떻게 더 적은 키 입력으로 효율성을 높일 수 있는지 살펴보겠습니다.Bash 별칭(Alia
GitHub에서 협업하는 팀에게 이슈, 풀 리퀘스트, 댓글 등으로 기록되는 이벤트 데이터는 프로젝트를 이해하는 데 필수적인 자료입니다.GitHub Actions가 정식 출시되면서, 우리는 프로그래밍 방식으로 GitHub 이벤트 데이터에 접근하고 이를 저장소에 보존할 수 있는 기회를 얻게 되었습니다. 데이터를 저장소 자체의 일부로 만드는 것은 GitHub 외부에 데이터를 보존하는 방법이기도 하며, GitHub Pages 같은 외부 공개 웹사이트에 데이터를 노출할 수 있게 해줍니다.그리고 저처럼 취향이 독특하다면, GitHub 이슈 댓
1년 중 그 시즌이 다시 돌아왔습니다! 상점마다 알록달록하고 반짝이는 장식을 내걸기 시작하면 누구나 조금씩 축제 분위기를 느끼게 되죠. 물론 여기서 말하는 축제 분위기란 곧 쇼핑을 하러 가자는 뜻입니다. 특히 연휴 선물 쇼핑! (엄밀히 따지면 자신에게 주는 선물도 선물입니다.)모든 게 엉망이 되지 않도록 선물 목록을 미리 만들어 두는 게 좋겠죠. Bash가 도와드리겠습니다.중괄호 확장(Brace Expansion)다음은 중괄호가 아닙니다: ()이것도 아닙니다: []이것이 바로 중괄호입니다: {}중괄호는 Bash에게 그 사이에 있는
컴퓨터가 인간이 읽을 수 있는 출력을 만들어내는 일은 의외로 만만치 않습니다. 표준 스트림, 그중에서도 표준 출력(stdout)의 등장으로 프로그램들은 일반 텍스트 스트림을 통해 서로 소통할 수 있게 되었지만, 이를 사람이 읽기 좋은 형태로 화면에 표시하는 것은 전혀 다른 차원의 문제였습니다. 비디오 디스플레이에 ASCII 문자를 사용하던 초기 컴퓨팅 시절부터 echo, printf 같은 현대의 셸 명령어에 이르기까지, 컴퓨팅 기술은 줄곧 이 문제를 해결하기 위해 발전해 왔습니다. 하지만 이러한 발전의 길은 순탄하지 않았습니다. 터
리눅스에는 방대한 수의 명령어가 있지만, 실제로 대부분의 사용자는 그중 일부만 사용합니다. 이 글에서는 터미널에서 가장 많이 쓰이는 리눅스 명령어들을 소개합니다.명령줄을 더 편하게 쓰는 기본 팁탭(Tab) 키로 자동 완성하기: 터미널에 무언가 입력하기 시작한 후 Tab을 누르면, 지금까지 입력한 문자열로 시작하는 가능한 옵션들이 제안됩니다.이전 명령 검색하기: ctrl+r 검색어를 사용하면 과거에 사용했던 명령어를 빠르게 찾을 수 있습니다.커서 빠르게 이동하기: ctrl+a와 ctrl+e로 줄의 맨 앞 또는 맨 뒤로 즉시 이동할 수