OS & Hardware/Linux_ubuntu

Shell 문법 비교

눈곱만큼도모름 2025. 2. 1. 04:59
728x90
반응형

Shell 문법 비교

1. 공통점

대부분의 셸은 Bourne Shell (sh) 계열 또는 C Shell (csh) 계열에서 파생되었기 때문에 공통적인 문법 요소를 공유

공통적으로 지원하는 기능:

  • 명령 실행 (ls, echo, cd 등)
  • 리다이렉션 (>, >>, <)
  • 파이프 (|)
  • 환경 변수 ($HOME, $PATH)
  • 조건문 (if, case)
  • 반복문 (for, while)
  • 함수 사용

하지만, Bash, Zsh, Ksh, Tcsh 등에서는 문법이 다를 수 있습니다.

  • Bash & Zsh → 가장 널리 사용되며 문법이 강력하고 유사함
  • Sh → 기본적인 기능만 제공하여 스크립팅이 제한적
  • Ksh → 성능이 좋고, Bash와 유사한 문법을 가짐
  • Tcsh → C 스타일 문법을 사용하지만, Bash보다 스크립트 작성이 어렵고 제한적

2. 쉘별 문법 차이 비교

기능 Bash
(리눅스 기본)
Zsh
(macOS 기본)
Sh
(기본 셸)
Ksh
(빠른 실행)
Tcsh
(C 스타일)
변수 선언 var=value var=value var=value var=value set var=value
변수 참조 $var $var $var $var $var
명령 치환 `command` 또는 $(command) `command` 또는 $(command) `command` 또는 $(command) `command` 또는 $(command) `command`
배열 arr=(1 2 3) arr=(1 2 3) 지원 안 함 set -A arr 1 2 3 set arr = (1 2 3)
조건문 if [[ ... ]]; then ... fi if [[ ... ]]; then ... fi if [ ... ]; then ... fi if [[ ... ]]; then ... fi if ( ... ) then ... endif
반복문 for var in ...; do ... done for var in ...; do ... done for var in ...; do ... done for var in ...; do ... done foreach var (...) ... end
함수 function name { ... } 또는 name() { ... } function name { ... } 또는 name() { ... } 지원 안 함 function name { ... } alias name 'command'

3. 쉘별 문법 예제

Bash & Zsh

#!/bin/bash
name="Ashton"
echo "Hello, $name!"

if [[ $name == "Ashton" ]]; then
    echo "This is Ashton!"
fi

for i in {1..3}; do
    echo "Number: $i"
done
    

Sh

#!/bin/sh
name="Ashton"
echo "Hello, $name!"

if [ "$name" = "Ashton" ]; then
    echo "This is Ashton!"
fi

for i in 1 2 3; do
    echo "Number: $i"
done
    

Ksh

#!/bin/ksh
set -A arr 1 2 3
echo "First element: ${arr[0]}"

for i in ${arr[@]}; do
    echo "Number: $i"
done
    

Tcsh

#!/bin/tcsh
set name = "Ashton"
echo "Hello, $name!"

if ($name == "Ashton") then
    echo "This is Ashton!"
endif

foreach i (1 2 3)
    echo "Number: $i"
end
    

 

728x90
반응형