소개
Linux 명령줄은 산술 계산을 수행하기 위한 강력한 도구를 제공합니다. Linux 에서 사용할 수 있는 가장 다재다능한 계산기 중 하나는 터미널에서 직접 간단하고 복잡한 수학 연산을 수행할 수 있는 bc (Basic Calculator) 입니다.
이 랩에서는 bc 명령을 사용하여 Linux 에서 다양한 산술 계산을 수행하는 방법을 배우게 됩니다. 기본적인 연산부터 시작하여 점차적으로 더 복잡한 표현식으로 이동할 것입니다. 여러분이 배우게 될 기술은 스크립팅, 데이터 처리, 그리고 Linux 환경에서 계산 문제를 효율적으로 해결하는 데 유용할 것입니다.
이 랩을 마치면 다음을 수행할 수 있습니다.
bc를 사용하여 기본적인 산술 연산을 수행합니다.- 여러 연산이 포함된 복잡한 수학 표현식을 처리합니다.
- 변수를 사용하고 계산에서 정밀도를 제어합니다.
- 수학적 계산을 자동화하는 스크립트를 생성합니다.
Linux bc 계산기의 기능을 탐구해 봅시다.
bc 를 이용한 기본 산술 연산
이 단계에서는 Linux 에서 기본 산술 연산을 위해 bc 명령을 사용하는 방법을 배우겠습니다. bc 명령은 터미널에서 직접 계산을 수행할 수 있는 강력한 계산기 도구입니다.
bc 설치
먼저, 시스템에 bc 계산기가 설치되어 있는지 확인해 보겠습니다.
sudo apt-get update
sudo apt-get install -y bc
설치 과정을 나타내는 출력을 볼 수 있습니다. 설치가 완료되면 다음을 입력하여 작동하는지 확인할 수 있습니다.
bc --version
bc 계산기의 버전 정보를 볼 수 있습니다.
간단한 덧셈 스크립트 생성
이제 bc를 사용하여 덧셈 연산을 수행하는 간단한 스크립트를 만들어 보겠습니다.
- 프로젝트 디렉토리로 이동합니다.
cd ~/project
simple_calc.sh라는 새 스크립트 파일을 생성합니다.
touch simple_calc.sh
- nano 편집기로 파일을 엽니다.
nano simple_calc.sh
- 파일에 다음 내용을 추가합니다.
#!/bin/zsh
## Simple addition using bc
echo "20 + 5" | bc
Ctrl+O,Enter를 눌러 파일을 저장하고Ctrl+X로 nano 를 종료합니다.스크립트를 실행 가능하게 만듭니다.
chmod +x simple_calc.sh
- 스크립트를 실행합니다.
./simple_calc.sh
다음 출력을 볼 수 있습니다.
25
이는 bc가 "20 + 5"라는 표현식을 입력으로 받아 25 라는 결과를 생성하는 방법을 보여줍니다.
bc 작동 방식 이해
bc 명령은 파이프라인 지향 계산기입니다. 파이프 기호 (|) 를 사용하여 표현식을 평가를 위해 bc로 보냅니다. 기본 구문은 다음과 같습니다.
echo "expression" | bc
다른 기본 연산도 시도해 볼 수 있습니다.
echo "10 - 3" | bc ## 뺄셈 (Subtraction)
echo "4 * 6" | bc ## 곱셈 (Multiplication)
echo "15 / 3" | bc ## 나눗셈 (Division)
터미널에서 이러한 명령을 실행하여 결과를 확인하십시오.
echo "10 - 3" | bc
echo "4 * 6" | bc
echo "15 / 3" | bc
출력은 다음과 같아야 합니다.
7
24
5
bc 를 이용한 부동 소수점 계산
이 단계에서는 bc 계산기를 사용하여 부동 소수점 계산을 수행하는 방법을 배우겠습니다. 기본적으로 bc는 정수 산술 연산을 수행하지만, scale 매개변수를 사용하여 소수점 정밀도를 제어할 수 있습니다.
scale 매개변수 이해
bc의 scale 매개변수는 계산에 사용할 소수점 자릿수를 결정합니다. 작동 방식을 살펴보겠습니다.
- scale 을 설정하지 않고 나눗셈을 수행하려면 다음 명령을 시도하십시오.
echo "5 / 2" | bc
출력은 다음과 같습니다.
2
결과가 반올림되지 않고 정수로 잘린 것을 확인하십시오.
- 이제 더 정확한 결과를 얻기 위해 scale 을 설정해 보겠습니다.
echo "scale=2; 5 / 2" | bc
출력은 다음과 같습니다.
2.50
scale=2는 bc에게 2 자리 소수점으로 결과를 계산하도록 지시합니다.
복잡한 계산을 위한 스크립트 생성
scale을 사용하고 더 복잡한 계산을 수행하는 스크립트를 만들어 보겠습니다.
- 아직 프로젝트 디렉토리에 있지 않다면, 프로젝트 디렉토리로 이동합니다.
cd ~/project
complex_calc.sh라는 새 스크립트 파일을 생성합니다.
touch complex_calc.sh
- nano 편집기로 파일을 엽니다.
nano complex_calc.sh
- 파일에 다음 내용을 추가합니다.
#!/bin/zsh
## Complex calculation using bc with scale
result=$(echo "scale=2; (10.5 * 4.2) - (5.5 / 2) + 3^2" | bc)
echo "Result: $result"
이 스크립트는 다음을 수행합니다.
- scale 을 소수점 2 자리로 설정합니다.
- 곱셈을 수행합니다: 10.5 * 4.2
- 나눗셈을 수행합니다: 5.5 / 2
- 거듭제곱을 계산합니다: 3^2 (3 의 2 제곱)
- 이러한 연산을 덧셈과 뺄셈과 결합합니다.
- 결과를
result라는 변수에 저장합니다. - 설명 레이블과 함께 결과를 출력합니다.
Ctrl+O,Enter를 눌러 파일을 저장하고Ctrl+X로 nano 를 종료합니다.스크립트를 실행 가능하게 만듭니다.
chmod +x complex_calc.sh
- 스크립트를 실행합니다.
./complex_calc.sh
다음과 유사한 출력을 볼 수 있습니다.
Result: 46.35
계산을 분석해 보겠습니다.
- 10.5 * 4.2 = 44.1
- 5.5 / 2 = 2.75
- 3^2 = 9
- 44.1 - 2.75 + 9 = 50.35
잠깐, 예상 결과는 50.35 여야 하는데 46.35 가 나왔습니다. 이는 스크립트의 계산이 수정되어야 하기 때문입니다. 수정해 보겠습니다.
nano complex_calc.sh
계산을 업데이트합니다.
#!/bin/zsh
## Complex calculation using bc with scale
result=$(echo "scale=2; (10.5 * 4.2) - (5.5 / 2) + 3^2" | bc)
echo "Result: $result"
## Breaking down the calculation
part1=$(echo "scale=2; 10.5 * 4.2" | bc)
part2=$(echo "scale=2; 5.5 / 2" | bc)
part3=$(echo "3^2" | bc)
echo "Part 1 (10.5 * 4.2): $part1"
echo "Part 2 (5.5 / 2): $part2"
echo "Part 3 (3^2): $part3"
echo "Final: $part1 - $part2 + $part3 = $(echo "scale=2; $part1 - $part2 + $part3" | bc)"
변경 사항을 저장하고 스크립트를 다시 실행합니다.
./complex_calc.sh
이 업데이트된 스크립트는 계산의 각 부분을 보여주어 최종 결과를 얻는 방법을 더 쉽게 이해할 수 있게 합니다.
bc 에서 변수 사용하기
이 단계에서는 bc 내에서 변수를 사용하여 계산을 더욱 유연하고 강력하게 만드는 방법을 배우겠습니다. bc 계산기를 사용하면 변수를 정의하고 여러 계산에서 재사용할 수 있습니다.
bc 대화형 모드에서 변수 사용하기
먼저, bc 대화형 모드에서 변수를 직접 사용하는 방법을 살펴보겠습니다.
- 대화형 모드에서
bc계산기를 시작합니다.
bc
- 변수를 정의하고 이를 사용하여 계산을 수행합니다.
x = 10
x + 5
x * 2
다음과 같은 출력을 볼 수 있습니다.
15
20
- 여러 변수를 정의하고 함께 사용할 수 있습니다.
y = 7
x + y
x * y
출력은 다음과 같습니다.
17
70
Ctrl+D를 누르거나quit을 입력하여 대화형 모드를 종료합니다.
bc 변수를 사용한 스크립트 생성
이제 bc 계산에서 변수를 사용하는 방법을 보여주는 스크립트를 만들어 보겠습니다.
- 아직 프로젝트 디렉토리에 있지 않다면, 프로젝트 디렉토리로 이동합니다.
cd ~/project
variable_calc.sh라는 새 스크립트 파일을 생성합니다.
touch variable_calc.sh
- nano 편집기로 파일을 엽니다.
nano variable_calc.sh
- 파일에 다음 내용을 추가합니다.
#!/bin/zsh
## Script to demonstrate using variables in bc
## Define input values
radius=5
height=10
## Calculate cylinder volume (π * r² * h)
volume=$(echo "scale=2; 3.14159 * $radius * $radius * $height" | bc)
## Calculate cylinder surface area (2π * r² + 2π * r * h)
surface_area=$(echo "scale=2; 2 * 3.14159 * $radius * $radius + 2 * 3.14159 * $radius * $height" | bc)
## Display results
echo "Cylinder properties with radius $radius and height $height:"
echo "Volume: $volume cubic units"
echo "Surface Area: $surface_area square units"
이 스크립트는 다음을 수행합니다.
- 원통의 반지름과 높이에 대한 변수를 정의합니다.
- 공식 π r² h 를 사용하여 부피를 계산합니다.
- 공식 2π r² + 2π r * h 를 사용하여 표면적을 계산합니다.
- 적절한 단위를 사용하여 결과를 표시합니다.
Ctrl+O,Enter를 눌러 파일을 저장하고Ctrl+X로 nano 를 종료합니다.스크립트를 실행 가능하게 만듭니다.
chmod +x variable_calc.sh
- 스크립트를 실행합니다.
./variable_calc.sh
다음과 유사한 출력을 볼 수 있습니다.
Cylinder properties with radius 5 and height 10:
Volume: 785.39 cubic units
Surface Area: 471.23 square units
bc 내부에서 변수 사용하기
또한 여러 줄 방식을 사용하여 bc 내에서 완전히 변수를 정의하고 사용할 수 있습니다. 이를 보여주는 다른 스크립트를 만들어 보겠습니다.
- 새 파일을 생성합니다.
nano bc_variables.sh
- 다음 내용을 추가합니다.
#!/bin/zsh
## Script to demonstrate using variables within bc
bc << EOF
scale=2
radius = 5
height = 10
pi = 3.14159
## Calculate cylinder volume
volume = pi * radius^2 * height
print "Volume: ", volume, " cubic units\n"
## Calculate cylinder surface area
surface_area = 2 * pi * radius^2 + 2 * pi * radius * height
print "Surface Area: ", surface_area, " square units\n"
EOF
이 스크립트는 다음을 수행합니다.
- "here document" (EOF) 를 사용하여 여러 줄을
bc로 보냅니다. bc자체 내에서 모든 변수를 정의합니다.- 이러한 변수를 사용하여 계산을 수행합니다.
bc의print명령을 사용하여 결과를 표시합니다.
- 파일을 저장하고 실행 가능하게 만든 다음 실행합니다.
chmod +x bc_variables.sh
./bc_variables.sh
출력은 이전 스크립트와 유사하지만 bc에서 변수를 사용하는 다른 방식을 보여줍니다.
실용적인 bc 계산기 스크립트 생성
이 마지막 단계에서는 지금까지 배운 모든 개념을 통합하는 더 실용적인 계산기 스크립트를 만들 것입니다. 이 스크립트를 통해 사용자는 메뉴에서 옵션을 선택하여 다양한 계산을 수행할 수 있습니다.
대화형 계산기 구축
대화형 계산기 역할을 하는 스크립트를 만들어 보겠습니다.
- 아직 프로젝트 디렉토리에 있지 않다면, 프로젝트 디렉토리로 이동합니다.
cd ~/project
calculator.sh라는 새 스크립트 파일을 생성합니다.
touch calculator.sh
- nano 편집기로 파일을 엽니다.
nano calculator.sh
- 파일에 다음 내용을 추가합니다.
#!/bin/zsh
## Interactive calculator script using bc
## Function to calculate area of a circle
calculate_circle_area() {
echo -n "Enter the radius of the circle: "
read radius
area=$(echo "scale=2; 3.14159 * $radius * $radius" | bc)
echo "The area of the circle with radius $radius is: $area square units"
}
## Function to calculate area of a rectangle
calculate_rectangle_area() {
echo -n "Enter the length of the rectangle: "
read length
echo -n "Enter the width of the rectangle: "
read width
area=$(echo "scale=2; $length * $width" | bc)
echo "The area of the rectangle with length $length and width $width is: $area square units"
}
## Function to solve quadratic equation ax² + bx + c = 0
solve_quadratic() {
echo -n "Enter coefficient a: "
read a
echo -n "Enter coefficient b: "
read b
echo -n "Enter coefficient c: "
read c
## Calculate discriminant
discriminant=$(echo "scale=4; ($b * $b) - (4 * $a * $c)" | bc)
## Check the discriminant
if (($(echo "$discriminant < 0" | bc -l))); then
echo "The equation has no real solutions (discriminant < 0)"
elif (($(echo "$discriminant == 0" | bc -l))); then
## One solution
x=$(echo "scale=4; -$b / (2 * $a)" | bc)
echo "The equation has one solution: x = $x"
else
## Two solutions
x1=$(echo "scale=4; (-$b + sqrt($discriminant)) / (2 * $a)" | bc -l)
x2=$(echo "scale=4; (-$b - sqrt($discriminant)) / (2 * $a)" | bc -l)
echo "The equation has two solutions:"
echo "x1 = $x1"
echo "x2 = $x2"
fi
}
## Main program loop
while true; do
echo ""
echo "===== BC Calculator Menu ====="
echo "1. Calculate area of a circle"
echo "2. Calculate area of a rectangle"
echo "3. Solve quadratic equation (ax² + bx + c = 0)"
echo "4. Exit"
echo ""
echo -n "Enter your choice (1-4): "
read choice
case $choice in
1) calculate_circle_area ;;
2) calculate_rectangle_area ;;
3) solve_quadratic ;;
4)
echo "Exiting calculator. Goodbye!"
exit 0
;;
*) echo "Invalid option. Please try again." ;;
esac
done
이 스크립트는 다음을 수행합니다.
- 다양한 유형의 계산에 대한 함수를 정의합니다.
- 사용자가 원하는 계산을 선택할 수 있는 메뉴 인터페이스를 제공합니다.
- 모든 수학 연산에
bc를 사용합니다. - 이차 방정식과 같은 더 복잡한 수학 공식을 처리합니다.
Ctrl+O,Enter를 눌러 파일을 저장하고Ctrl+X로 nano 를 종료합니다.스크립트를 실행 가능하게 만듭니다.
chmod +x calculator.sh
- 계산기 스크립트를 실행합니다.
./calculator.sh
- 메뉴에서 각 옵션을 시도해 보십시오.
- 옵션 1 을 선택하고 반지름을 입력하여 원의 면적을 계산합니다.
- 옵션 2 를 선택하고 길이와 너비를 입력하여 직사각형의 면적을 계산합니다.
- 옵션 3 을 선택하고 계수를 입력하여 이차 방정식을 풉니다 (a=1, b=5, c=6 을 시도해 보십시오).
- 옵션 4 를 선택하여 계산기를 종료합니다.
예를 들어, 옵션 3 을 선택하고 a=1, b=5, c=6 을 입력하면 다음과 유사한 출력을 볼 수 있습니다.
The equation has two solutions:
x1 = -2.0000
x2 = -3.0000
이 대화형 스크립트는 bc가 다양한 수학 문제를 해결하기 위해 더 복잡한 프로그램에 어떻게 통합될 수 있는지를 보여줍니다.
요약
이 랩에서는 Linux 에서 bc 명령줄 계산기를 사용하여 다양한 산술 연산을 수행하는 방법을 배웠습니다.
다음은 수행한 작업에 대한 요약입니다.
기본 산술 연산:
bc계산기를 설치하고 확인했습니다.- 덧셈을 수행하는 간단한 스크립트를 만들었습니다.
- 파이프 연산자를 사용하여 표현식을
bc로 보내는 방법을 배웠습니다. - 덧셈, 뺄셈, 곱셈 및 나눗셈과 같은 기본 연산을 연습했습니다.
부동 소수점 계산:
- 소수점 정밀도를 제어하기 위해
scale매개변수를 사용했습니다. - 여러 연산이 포함된 더 복잡한 계산을 위한 스크립트를 만들었습니다.
- 연산 순서와 괄호를 사용하여 계산 흐름을 제어하는 방법을 이해했습니다.
- 소수점 정밀도를 제어하기 위해
변수 사용:
bc계산에 셸 변수를 사용했습니다.- 변수를 정의하고 사용하기 위해
bc의 대화형 모드를 탐색했습니다. - 더 유연한 계산을 위해 변수를 활용하는 스크립트를 만들었습니다.
- 여러 줄의
bc연산에 "here documents"를 사용하는 방법을 배웠습니다.
실용적인 응용:
- 메뉴 인터페이스가 있는 대화형 계산기 스크립트를 구축했습니다.
- 일반적인 기하학적 계산을 구현했습니다.
- 이차 공식과 같은 더 복잡한 방정식을 풀었습니다.
- 배운 모든 개념을 유용한 응용 프로그램으로 결합했습니다.
이러한 기술을 통해 Linux 명령줄에서 수학 연산을 효율적으로 수행하고 스크립트에서 계산을 자동화할 수 있습니다. bc 계산기는 간단한 산술에서 복잡한 수학 공식까지 모든 것을 처리할 수 있는 강력한 도구이므로 Linux 환경에서 작업하는 시스템 관리자, 개발자 및 데이터 분석가에게 필수적인 유틸리티입니다.
Linux 를 계속 사용하면서 bc와 같은 명령줄 도구를 셸 스크립팅과 결합하면 광범위한 문제를 보다 효율적으로 해결하는 데 도움이 될 수 있습니다.



