본문 바로가기

스터디

(35)
[리눅스] 36. 그 외 유용한 툴들 1. 그룹 명령과 서브 쉘 bash는 명령어들을 그룹화하여 함께 사용할 수 있도록 허용하는 방법이 있다. 그룹 명령을 사용하든지 서브쉘을 사용하는 것이다. 그룹 명령 : " {command1; command2; [ command3; ... ]}" 서브쉘 : " (command1; command2; [ command3; ... ]) " (1) 리다이렉션 수행 그룹 명령과 서브쉘은 둘다 리다이렉션을 조절하기 위해 사용된다. 복수 명령어들로 리다이렉션을 수행하는 스크립트를 보면 ls -l > opuput.txt echo "Listing of foo.txt" >> output.txt cat foo.txt >> output.txt​ 세 명령의 출력을 output.txt 파일로 리다이렉션한다. 그룹 명령 : { l..
[리눅스] 35. 배열 1. 배열이란? 배열은 하나 이상의 값을 가지고 있는 변수다. 배열은 테이블과 같은 형태로 구성된다. 스프레드시트를 예로 들어보자. 스프레드시트는 이차원 배열처럼 동작한다. 행과 열이 있고, 스프레드시트의 셀들을 가지고 있다. 배열도 같은 방식으로 동작한다, 배열은 원소라고 부르는 셀들을 가지고 있다. 그리고 각 원소들은 데이터를 가지고 있다. 각 배열 원소에는 인덱스 혹은 첨자라 불리는 주소를 사용하여 접근할 수 있다. 대부분 프로그래밍 언어들이 다차원 배열을 지원한다. 2. 배열 생성 배열 변수는 다른 bash 변수들처럼 이름을 붙일 수 있고 저븐 시에 자동적으로 변수가 만들어진다. $ a[1]=foo $ echo ${a[1]} foo​ 원소 1에 값 foo가 할당되고, 원소 1에 저장된 값을 ech..
[리눅스] 33. 흐름 제어: for 루프 1. for : 전통적인 쉘 형식 for 명령어의 원 문법은 다음과 같다. " for variable [in words]; do commands done " variable는 루프 수행 중에 증가되는 변수면이고, words는 선택적인 variable에 순차적으로 할당되는 항목의 목록이다. commands는 각 반복마다 실행되는 명령들이다. $ for i in A B C D; do echo $i; done A B C D $ for i in {A..D}; do echo $i; done A B C D 위는 ABCD 목록을 순차적으로 출력한 것이다. 각 루프가 실행될 때마다 변수 i에 ABCD가 할당되고 echo명령어를 통해서 각 반복마다 echo 명령어가 실행되게 되는 로직이다.
[리눅스] 32. 위치 매개변수 앞장에서 만든 프로그램에서 한 가지 놓치고 있는 기능은 커맨드라인 옵션과 인자를 허용하고 처리하는 능력이다. 이번 장에서는 커맨드라인의 내용에 접근하는 쉘 기능을 알아볼 것이다. 1. 커맨드라인 항목 접근 쉘은 위치 매개변수라는 변수의 집합을 제공한다. 그것은 커맨드라인 명령의 개별 요소들을 가지고 있으며 변수들은 0부터 9까지 이름 붙인다. 아래와 같은 방식으로 나타낼 수 있다. # posit-param \$0 = $0 \$1 = $1 \$2 = $2 . . . \$9 = $9​ 커맨드라인 인자 없이 위의 스크립트를 실행하면 다음과 같다. $ posit-param $0 = /home/me/bin/posit-param $1 = $2 = . . . $9 = 인자가 없는 경우조차도 $0은 항상 커맨드라인의 ..
[리눅스] 31. case 분기 앞 장에서 선택된 항목을 식별하기 위해서 if 명령어를 연속으로 사용하였다. if 명령어와 유사하게 선택된 항목 다중 선택을 위한 프름 제어 기법이 여러 존재한다. 이번 장에서는 case 명령어에 대해 볼 것이다. 1. case (1) case 문법 " case word in [pattern [| pattern] ...) commands ;;] ... esac" read -p "Enter selection [0-3] >" if [[ $REPLY =~ ^[0-3]$ ]]; then if [[ $REPLY == 0 ]]; then pass fi if [[ $REPLY == 1 ]]; then pass fi fi​ 위는 if 명령어를 사용해서 케이스를 분류해놓은 것이다. if 명령어를 case 명령어의 형태로..
[리눅스] 30. 문제 해결 스크립트들을 좀 더 복잡하게 만들어, 실수를 했을 때나 프로그램이 원치 않는 동작을 할때 무슨 일이 벌어지는지 확인해야 하는데 이러한 오류들과 문제를 찾는 방법들이 몇몇 존재한다. 1. 구문 오류 일반적인 오류 분류 중 하나는 구문적인 것이다. 구문 오류에는 쉘 구문 요소의 잘못된 타이핑을 포함한다. 대부분 이러한 오류는 스크립트를 실행하는 경우 쉘에 혼란을 일으킬 수 있다. (1) 따옴표 누락 스크립트에서 따옴표를 제거하면 두 가지의 오류가 발생한다. 하나는 프로그램에서 따옴표가 누락된 곳이 아닌 그 이후의 행 번호를 보고한다. bash는 나머지 마침 따옴표를 찾을 때까지 계속 다음 따옴표를 찾게된다. 마지막은 그 다음 마침 따옴표를 다른 행에서 찾게 되면 bash는 혼란스러워하고, 문법이 깨져버린다...
[리눅스] 28. 키보드 입력 읽기 앞 장에서 작성한 스크립트들은 대다수 컴퓨터 프로그램에서 사용하는 일반적인 기능이 빠져있다. 바로 대화식 모드이다. 이 것은 사용자와 프로그램 사이에 상호 작용하는 것을 말한다. 모든 프로그램들이 대화식으로 작동할 필요는 없지만 일부 프로그램에서는 사용자로부터 직접적인 입력을 허용하는 것이 효과적일 수 있다. 1. read - 표준 입력에서 값 읽어오기 read는 쉘의 내장 명령어로 표준 입력으로 들어온 내용을 한 줄씩 읽어올 때 사용된다. 이 명령어는 키보드 입력을 읽어올 때나 리다이렉션을 적용하여 파일의 데이터를 읽어올 때 사용될 수 있다. "read [-options] [variable ...] options는 옵션 중 하나 이상을 지정하고, variable에는 입력 값을 할당할 변수명을 하나 이상..
[리눅스] 27. 흐름 제어: if 분기 우리가 작성 중인 보고서 생성 스크립트가 실행될 때 사용자 권한에 따라 결과를 어떻게 조정할 수 있을까? 이 문제에 대한 해결책은 스크립트 내에서 테스트 결과에 따라 방량을 바꾸는 방법을 찾는데 있다. 프로그래밍식으로 말하면, 프로그램을 분기할 필요가 있다. 1. if의 사용 1) 쉘 x = 5 if [$x = 5]; then echo "x equals 5." else exho "x does not equal 5." fi x=5라는 조건을 만족하면 "x는 5다" 라고 출력이 되고, 그렇지 않으면 "x는 5가 아니다라는 문구가 출력이 되는 코드이다. 2) 커맨드라인 $ x=5 $ if [$x = 5]; then echo "equals 5"; else echo "does not equal 5"; equals..