< 과제 3 >

 

우선, 사용자에게 숫자를 입력받기 위해 read 명령어를 이용했다.

입력한 수를 num이라는 변수에 저장한 후 입력받은 수가 짝수일 때는 별찍기, 홀수일 때는 구구단을 출력하기 위해

조건문 if를 사용했다.

입력받은 수가 짝수일 때는 num값을 2로 나눴을 때 0인 것으로 작성했다.

이 때 -eq는 비교 연산자 "= ="를 의미한다.

짝수일 때는 그 수를 높이로 하는 별을 찍기 위해 for문을 사용했다.

(별찍기 코드는 C++ 스터디에서 했던 코드를 이용했다.)

또한, else를 이용하여 입력받은 수가 홀수일 때는 구구단이 출력되도록 하기 위해 while문을 사용했다.

-le는 비교 연산자 "< ="를 의미하고 위와 같이 입력된 수의 구구단이 출력되도록 코드를 작성했다.

 

스크립트를 모두 작성 후 실행시키면 다음과 같다.

 

위와 같이 짝수를 입력했을 때는 그 짝수를 높이로 하는 별찍기 모양이 잘 출력되는 것을 확인할 수 있다.

 

위와 같이 홀수를 입력했을 때는 그 홀수의 구구단이 잘 출력되는 것을 확인할 수 있다.

 

 

 

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 5 - 2  (0) 2020.06.07
Linux Study Week 5 - 1  (0) 2020.06.07
Linux Study Week 4 - 3  (0) 2020.06.01
Linux Study Week 4 - 2  (0) 2020.06.01
Linux Study Week 4 - 1  (0) 2020.06.01

< 과제 2 - 계산기 프로그램 >

 

우선 list에 원하는 값들을 입력해둔 후 메뉴를 반복해서 실행시킬 수 있도록 하기 위해 select문을 이용했다.

list에 저장해둔 값이 하나씩 cal이라는 변수에 저장되고,

case문을 이용하여 각각의 값에 해당되는 명령을 분기시킨 후 작성했다.

또한, 연산 결과의 값이 출력되도록 하기 위해 "$(( ))" 안에 명령을 입력하여 값이 실행될 수 있도록 했다.

Exit에 해당하는 값을 입력하면 반복 실행문을 빠져나가도록 break문을 입력해주었고,

REPLY가 null일 때만 프롬프트(=PS3 값)가 출력되므로 REPLY를 널로 설정했다.

 

리눅스에서는 곱셈 연산을 할 때 \*를 입력해주어야 한다고 해서 처음에는 그렇게 했지만, 위와 같은 오류가 발생했다.

그래서 $(($num1*$num2))로 수정한 후 실행시켰다.

 

스크립트를 모두 작성한 후 실행시킨 결과는 다음과 같다.

 

위와 같이 select문을 사용했기 때문에 메뉴가 반복하여 출력된다.

 

1번 선택 후 원하는 숫자를 입력하면 덧셈이 잘 실행되는 것을 확인할 수 있다.

 

2번 선택 후 원하는 숫자를 입력하면 뺄셈이 잘 실행되는 것을 확인할 수 있다.

 

3번 선택 후 원하는 숫자를 입력하면 곱셈이 잘 실행되는 것을 확인할 수 있다.

 

4번 선택 후 원하는 숫자를 입력하면 나눗셈이 잘 실행되는 것을 확인할 수 있다.

 

5번을 선택하면 break문의 효과로 인해 반복 실행문을 잘 빠져나가는 것을 확인할 수 있다.

 

 

 

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 5 - 3  (0) 2020.06.07
Linux Study Week 5 - 1  (0) 2020.06.07
Linux Study Week 4 - 3  (0) 2020.06.01
Linux Study Week 4 - 2  (0) 2020.06.01
Linux Study Week 4 - 1  (0) 2020.06.01

< 조건문 >

 

- 산술 비교 연산자

 

산술 비교 연산자 의미
A -eq B A = = B
A -ne B A ! = B
A -gt B A > B
A -ge B A > = B
A -lt B A < B
A -le B A < = B

 

- 문자열 비교 연산자

 

문자열 비교 연산자 의미
문자열 A = 문자열 B A와 B가 같다
문자열 A != 문자열 B A와 B가 다르다
-n 문자열 문자열이 null이 아니면 참
-z 문자열 문자열이 null이면 참

 

- 파일 관련 연산자

 

파일 관련 연산자 의미
-a 파일명 해당 파일이 존재하면 참
-e 파일명 해당 파일이 존재하면 참
-r 파일명 해당 파일을 읽을 수 있으면 참
-w 파일명 해당 파일을 쓸 수 있으면 참
-x 파일명 해당 파일을 실행할 수 있으면 참
-f 파일명 해당 파일이 일반 파일이면 참
-d 파일명 해당 파일이 디렉토리면 참

 

< case문 >

 

- case문은 C언어의 case~switch문과 동일한 역할을 한다.

- case로 시작하고, esac로 끝난다.

- 각 조건은 )로 끝나며 실행문 끝에는 ;;를 입력해야 한다.

 

위와 같이 스크립트 작성 후 실행시키면 다음과 같다.

 

위에서 score값을 2라고 저장해두었기 때문에 echo B;;가 실행되므로 B가 출력되는 것을 확인할 수 있다.

 

< for문 >

- for문은 for로 시작하고, done으로 끝난다.

- do와 done 사이에 명령(실행문)을 작성한다.

- for문을 사용하는 방법은 다양한데, 다음의 방식들이 있다.

 

첫번째 방법은 위와 같다.

for 변수 in 리스트를 적어주는데, 이 때 리스트는 공백 문자로 구분을 지어준다.

또한, do와 done 사이에 명령을 작성한다.

 

두번째 방법은 C언어처럼 "(( ))" 사이에 초기식, 조건식, 증감식을 적어준 후 do 다음에 실행문을 작성해준다.

 

세번째 방법은 list를 따로 적어주는 것이다.

list에 들어가길 원하는 값을 공백 문자로 구분하여 "( )" 안에 적어준다.

또한 for 변수 in 리스트에서 리스트 안의 값을 넣어주기 위하여 ${list[*]}를 작성해준다.

 

위에서 본 세 가지 방법의 실행 결과는 모두 이와 같은 것을 확인할 수 있다.

 

< while문 >

 

- while문은 while로 시작하고, done으로 끝난다.

- for문과 마찬가지로 do 다음에 명령(=실행문)을 작성한다.

 

위와 같이 스크립트를 작성한 후 실행시키면 다음과 같다.

 

위에서 num 값이 10이 될 때까지 1씩 증가시키면서 sum에 더해주라는 명령을 작성했기 때문에

$sum에는 1+2+3+ ··· +10값이 저장되므로 이 스크립트를 실행시키면 total : 55라는 문장이 출력되는 것을 확인할 수 있다.

 

< select문 >

 

- select문은 메뉴를 생성할 수 있는 반복 실행문이다.

- PS3은 프롬프트를 변경하기 위한 쉘 변수이다.

- 사용자는 각 항목에 자동 부여된 번호를 선택할 수 있고, 사용자가 입력한 값은 select와 in 사이에 지정된 변수에 저장된다.

- REPLY가 NULL일 때만 프롬프트(PS3값)가 출력되기 때문에 계속 출력시키기 위해서는 "REPLY="를 입력해주어야 한다.

 

위와 같이 스크립트를 작성한 후 실행시키면 다음과 같다.

 

위와 같이 사용자가 자동 부여된 번호를 입력할 수 있고, 입력한 번호의 값은 스크립트에서 지정한 work라는 변수에 저장된다.

따라서 2를 입력하면 2번의 값인 Run이 출력되는 것을 확인할 수 있다.

 

< break문 >

 

- 반복 루프 안에서 사용한다.

- 이후의 실행을 무시하고 루프를 탈출한다.

 

< continue문 >

 

- 반복 루프 안에서 사용한다.

- 이후의 실행을 무시하고 루프의 맨 처음으로 돌아간다.

 

< 함수 >

 

- 함수를 정의할 때는 함수이름( )을 입력하고, { } 사이에 명령어를 입력한다.

- 함수를 호출할 때는 함수이름 매개변수를 입력하여 호출한다.

 

입력한 스크립트를 실행시키면 매개변수1 값에 fun이 저장되어 위와 같이 잘 출력되는 것을 확인할 수 있다.

 

- 함수를 종료시킬 때는 함수 본문 안의 마지막 문장을 실행하고 return문을 실행한다.

- 이 때, return문에 지정한 값이 함수 종료값으로 $?에 저장된다.

 

매개변수 1,2에 들어갈 값을 입력한 후 스크립트를 실행시키면 위와 같이 잘 출력되는 것을 확인할 수 있다.

 

< 실습 1 - case문 >

 

숫자를 입력받게 하기 위해 read 명령어를 이용하고, 입력과 출력을 한 줄에서 실행하도록 하기 위해 -p 옵션을 사용한다.

case문을 이용하여 숫자가 3, 6, 9이면 'Hello 숫자'를 출력하고, 그 외의 숫자면 'Bye'를 출력하도록 스크립트를 작성한다.

 

위와 같이 스크립트 작성하고 실행 권한을 부여해준 후 실행시키면 위와 같이 숫자의 입력과 출력을 한 줄에서 실행할 수 있다.

또한, 3을 입력하면 Hello 3이 출력되고 3,6,9 이외의 수를 입력하면 Bye가 잘 출력되는 것을 확인할 수 있다.

 

< 실습 2 - for문 >

 

for문을 이용하는 방법은 많지만 여기서는 list에 값을 지정해두는 방법을 사용하였다.

위와 같이 list 괄호 안에 리스트 내용을 입력해둔 후 num이라는 변수에 리스트 안의 값이 출력되도록 스크립트를 작성했다.

 

스크립트를 저장한 후 실행시키면 위와 같이 리스트 내용이 잘 출력되는 것을 확인할 수 있다.

 

< 실습 3 - while문 >

 

-le는 비교연산자 "< =" 를 의미한다.

직각삼각형 모양을 만들기 위해 while문을 이용하여 위와 같이 스크립트를 작성해준다.

(C++ 스터디에서 한 코드를 이용했다.)

 

스크립트를 저장한 후 실행시키면 위와 같이 직각삼각형이 잘 출력되는 것을 확인할 수 있다.

 

< 실습 4 - select문 >

 

select문은 메뉴를 생성할 수 있는 반복 실행문이다.

사용자가 각 항목에 자동 부여된 번호를 선택할 수 있도록 하기 위해 select문을 이용했고,

case문을 이용하여 각각의 값이 분기되어 선택된 값에 해당하는 명령을 실행시킬 수 있도록 스크립트를 작성했다.

또한, 계속 출력을 할 수 있도록 하기 위해 REPLY를 null로 설정했다.

 

스크립트를 저장한 후 실행시키면 위와 같이 사용자가 원하는 숫자를 입력받을 수 있다.

또한, 입력된 숫자에 해당되는 명령이 잘 출력되는 것을 확인할 수 있다.

 

 

 

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 5 - 3  (0) 2020.06.07
Linux Study Week 5 - 2  (0) 2020.06.07
Linux Study Week 4 - 3  (0) 2020.06.01
Linux Study Week 4 - 2  (0) 2020.06.01
Linux Study Week 4 - 1  (0) 2020.06.01

< 과제 3 >

 

( 파일 실행할때 주는 매개변수가 사용자명이 된다.)
1. who are you? 라고 물으면, 이름 입력받기(read 사용)
2. 사용자 명(apple)이 아니면, Permission Denied로 뜨게하기
3. 사용자 명(apple)이 맞다면,
1) ls –l 한 결과와 컴파일 할 파일을 묻고 입력받는다.
2) 이때, 컴파일 하여 생긴 실행파일(a.out)의 이름을 현재 날짜로 바꾸어주기 (ex. 20200529)
( ls 하여 현재 날짜로 된 실행파일이 있는지 확인하고, 실행해보기)

 

vi 편집기로 assign1.sh라는 파일에 위와 같은 내용을 입력해준다.

매직넘버를 이용하여 실행할 쉘스크립트를 만들어 준다.

who are you? 라는 질문에 답을 입력하기 위해 read라는 명령어를 이용하고 name이라는 변수에 입력한다.

입력과 출력을 한 행에서 처리하기 위해 -p 옵션을 사용한다.

if문을 이용하여 name 변수에 입력한 값과 매개변수($1=사용자명)에 입력한 값이 같다면

( if문을 쓸 때 괄호([ ])와 비교 연산자(=) 앞뒤에 반드시 공백이 있어야 함을 주의한다. )

파일 상세 정보를 출력하기 위해 ls -l을 해준다.

그리고 컴파일할 파일을 묻고(file to compile) 입력받기 위해 read명령어를 이용한다.

이 때도 위와 같이 -p 옵션을 사용하여 입력과 출력을 한 행에서 처리하고 file이라는 변수에 입력한다.

위에서 입력한 컴파일할 파일을 컴파일하기 위해 gcc를 이용한다.

컴파일하여 생성된 실행파일 a.out의 이름을 현재 날짜로 바꾸어주기 위해 파일명을 변경해주는 명령어인 mv를 이용한다.

이 때, date라는 명령어를 통해 현재 날짜와 시간으로 변경되도록 했고 (Y:연도, m:월, d:일)

date+포맷을 입력할 때 +와 포맷 사이에 공백이 없어야 함을 주의해야 한다.

또한, 컴파일이 성공되었다는 메세지(Success to compile)가 출력되도록 echo 명령어를 이용한다.

만약 name 변수에 입력한 값과 매개변수($1=사용자명)에 입력한 값이 다르다면 (=else)

Permission denied라는 메세지가 출력되게 하기 위해 echo를 이용한다.

위와 같은 내용을 모두 입력하고 vi 편집기를 저장 후 종료한다.

 

 

chmod를 이용하여 assign1.sh 파일에 실행 권한을 부여해준다.

apple을 매개변수로 하여 assign1.sh 파일을 실행시킨 후 who are you?라는 질문에 apple과 다른 swing을 입력해주면

permission denied라는 메세지가 잘 출력되는 것을 확인할 수 있다.

( 이와 같이 출력되는 이유는 매개변수와 입력받은 이름이 다르기 때문이다. )

 

 

assign1.sh 파일을 실행하기 전에 ls하여 현재 날짜로 된 실행파일이 없음을 확인할 수 있다.

 

 

apple을 매개변수로 하여 assign1.sh 파일을 실행시킨 후 who are you?라는 질문에 apple과 같은 apple을 입력해주면

ls -l한 결과가 잘 출력되고 컴파일 할 파일을 묻고 입력받을 수 있게 함을 확인할 수 있다.

hello.c를 입력하면 Success to compile이라는 메세지가 잘 뜨는 것을 확인할 수 있다.

 

 

위와 같이 ls를 입력하여 파일을 확인해보면 a.out 대신 현재 날짜(20200602)로 파일명이 잘 변경된 것을 확인할 수 있다.

 

 

또한, 20200602 파일을 실행시켜보면 hello.c파일에 입력되어있던 내용을 컴파일한 내용이 잘 출력됨을 확인할 수 있다.

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 5 - 2  (0) 2020.06.07
Linux Study Week 5 - 1  (0) 2020.06.07
Linux Study Week 4 - 2  (0) 2020.06.01
Linux Study Week 4 - 1  (0) 2020.06.01
Linux Study Week 3 - 3  (0) 2020.05.24

< 과제 2 >

 

1. 매개변수 총 4개를 가지고 실행한다. ( 매개변수명은 자유롭게 가능)
2. 첫번째 매개변수(ex. abcd)는 디렉토리명으로, 사용자 홈디렉토리에 생성한다. (~/)
3. 만든 디렉토리로 이동하여, 매개변수2,3,4 (ex. a, b, c)의 이름의 파일을 생성한다. (touch)
4. 만든 디렉토리에 파일이 잘 생성되었는지 확인하기 위해, ls –l을 해준다.
5. 삭제할 파일을 묻고(read), 입력 받아, 삭제한다. (rm)
6. 삭제 한 후, 다시 ls –l하여 삭제된 것을 확인할 수 있도록 한다.

 

 

vi 편집기로 assign0.sh 라는 파일에 위와 같은 내용을 입력해준다.

#! /bin/bash를 입력하여 실행할 쉘스크립트를 만들어 준다.

디렉토리를 생성하는 명령어인 mkdir을 이용하여 홈 디렉토리(~)에 $1 디렉토리를 생성해준다. ($1은 매개변수1을 의미)

만들어진 디렉토리로 이동하기 위해 cd ~/$1을 입력해준다.

만들어진 디렉토리에 매개변수 2, 3, 4 파일을 생성하기 위해 touch 명령어를 이용한다. ($2, $3, $4는 매개변수2,3,4를 의미)

만들어진 디렉토리에 파일이 잘 생성되었는지 확인하기 위해 ls -l을 해준다.

삭제할 파일을 묻기 위해 read 명령어를 이용한다. (-p는 입력과 출력을 한 행에서 처리해주는 옵션)

file이라는 변수로 삭제할 파일을 입력받은 후 rm 명령어를 이용하여 입력한 파일을 삭제한다.

입력한 파일이 잘 삭제되었는지 확인하기 이해 다시 ls -l을 해준다.

 

 

vi 편집기를 저장 후 종료하고, assign0.sh 파일을 실행시키면 다음과 같다.

assign0.sh 라는 파일에 실행 권한을 부여해준 후 abcd라는 디렉토리와 a, b, c라는 파일을 생성한다

위와 같이 처음에는 입력한 파일이 잘 생성된 것을 볼 수 있고 delete file에 삭제할 파일명을 입력하면

입력한 파일이 잘 삭제된 것을 확인할 수 있다.

 

 

 

 

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 5 - 1  (0) 2020.06.07
Linux Study Week 4 - 3  (0) 2020.06.01
Linux Study Week 4 - 1  (0) 2020.06.01
Linux Study Week 3 - 3  (0) 2020.05.24
Linux Study Week 3 - 2  (0) 2020.05.24

< 쉘 스크립트 >

 

vi 편집기에 위와 같은 내용을 입력한다.

#!는 매직 넘버로 스크립트를 처리하는 인터프리터이다. 즉, 스크립트 파일을 bash 쉘로 실행시킨다는 의미이다.

echo는 화면에 문자열을 출력하기 위해 사용된다.

exit 10은 종료 상태를 나타낸다.

 

hello.sh 파일에 실행 권한을 부여해준 후 실행시키면 입력한 내용이 잘 출력되는 것을 볼 수 있다.

위와 같이 실행하는 방법은 ./와 bash를 쓰는 두 가지 방법이 있다.

 

ls명령어를 이용하여 hello.sh 파일이 생성된 것을 확인할 수 있다.

exit [종료상태]는 종료값을 지정하며 스크립트를 종료하고 $? 변수에 저장된다. ($?는 가장 최근 명령어의 종료 상태)

종료 상태의 범위는 0~255이고 0은 성공, 1~255는 오류코드를 나타낸다.

ls -l 후의 $?은 성공했으므로 0이고 ./hello.sh의 종료상태는 10으로 입력해두었기 때문에 10으로 나오는 것을 볼 수 있다.

 

< 변수사용과 매개변수 >

 

vi 편집기로 name.sh 이라는 파일에 내용을 입력한다.

위와 같이 변수를 선언할 수 있는데, 변수 선언 시 = 앞뒤로 공백이 없어야 한다.

변수의 값을 지정해주기 위해 name 앞에 $을 붙여야한다.

※ $( )는 실행결과를, $(( ))는 계산결과를 나타낸다.

 

저장하고 name.sh 파일을 출력하면 변수에 저장된 값으로 잘 출력되는 것을 볼 수 있다.

 

큰 따옴표(" ")는 변수의 값을 잘 출력해주지만, 작은 따옴표(' ')는 $의 의미를 없앤다.

 

또한, 문자열에서 큰 따옴표(" ")는 공백을 보존하여 출력해주지만 따옴표 없는 echo는 보존해주지 않는다.

 

그리고, 역 따옴표(` `)는 실행 결과를 나타낸다.

 

vi 편집기로 prac1이라는 파일에 위와 같은 내용을 입력한다.

prac1 파일에 실행 권한을 부여한 후 실행시키면 다음과 같다.

 

그냥 echo는 공백을 보존해주지 않기 때문에 a bcd로 출력이 된다.

큰 따옴표(" ")는 공백을 보존해주기 때문에 입력한 내용이 그대로 출력되는 것을 확인할 수 있다.

작은 따옴표(' ')는 $의미를 없애주기 때문에 $b로 출력되는 것을 볼 수 있다.

 

vi 편집기로 param1.sh 라는 파일에 위와 같은 내용을 입력해준다.

$* : 입력된 매개변수들의 목록

$# : 입력된 매개변수들의 수

$0 : 쉘 스크립트 이름

$1, $2, ··· : 매개변수 1, 2, ···

\ : $의 의미를 잃음

※ 따옴표(" ")로 묶는 것은 하나의 매개변수로 취급한다.

 

먼저 param1.sh 파일에 실행 권한을 부여해준다.

매개변수로 a b c 를 입력했으므로 $*에는 a b c가 출력되고, 매개변수의 수는 3개이므로 $#에는 3이 출력된다.

쉘 스크립트 이름은 param1.sh이므로 $0에 잘 출력되었고 $1, $2에는 매개변수 1(=a), 매개변수 2(=b)가 출력된 것을 확인할 수 있다.

 

위와 같이 date 명령어를 통해 날짜와 시간을 알 수 있다.

date +포맷을 입력하여 세부 정보를 알 수 있는데, 이 때 +와 포맷 사이에 공백은 없어야 한다.

 

※ 명령어 조건 실행에는 논리곱(&&)과 논리합(||)이 있다.

명령어1 && 명령어2는 논리곱으로 명령어1의 실행 결과가 성공이면 명령어2를 실행한다.

명령어1 || 명령어2는 논리합으로 명령어1의 실행 결과가 실패면 명령어2를 실행한다.

 

< 입력 >

 

vi 편집기로 read1.sh 파일에 위와 같은 내용을 입력한다.

read는 표준 입력을 문자열을 받는 쉘 내장 명령어로 형식은 read [옵션] [변수명]이다.

 

read1.sh 파일에 실행 권한을 부여한 후 실행시키면 read명령어로 인해 원하는 내용을 입력할 수 있고,

다음 행에서 입력한 내용이 잘 출력되는 것을 볼 수 있다.

※ 입력과 출력을 한 행에서 처리하고 싶다면 -p라는 옵션을 주면 된다.

 

vi 편집기로 read2.sh 라는 파일에 위와 같은 내용을 입력한다.

입력과 출력을 한 행에서 처리하기 위해 -p 옵션을 사용했다.

또한, if문으로 문자열을 비교하여 입력한 문자열이 같다면 same, 다르다면 not same, 끝났다면 end가 출력되도록 했다.

※ if문을 쓸 때 괄호([ ])와 비교 연산자(= 또는 ==) 앞뒤에 반드시 공백이 있어야 한다.

 

위와 같이 name1과 name2는 한 행에서 입력과 출력을 받을 수 있고,

입력한 문자가 같다면 same, 다르다면 not same, 조건문이 끝났으면 end가 출력되는 것을 확인할 수 있다.

 

vi 편집기로 terminator1 파일에 위와 같은 내용을 입력한다.

명령 << [입력 종료문자]를 입력하면 입력 종료문자가 입력될 때까지 키보드 입력을 받는다.

이것은 표준 입력을 사용자로부터 받아들이지 않고 자동으로 처리할 때 사용한다.

 

위와 같이 실행 권한을 부여한 후 실행시키면 vi 편집기에서 입력했던 내용이 잘 출력되는 것을 볼 수 있다.

 

< 실습 1 >

1. 홈디렉토리(~) 에 password라는 디렉토리 만들기
2. password 디렉토리로 이동하기
3. 현재 디렉토리로, /etc/passwd 파일을 복사해온다.

 

#! /bin/bash를 입력하여 실행할 쉘스크립트를 만들어 준다.

mkdir을 이용하여 홈 디렉토리(~)에 password라는 디렉토리를 만든다.

password 디렉토리로 이동하기 위해 cd라는 명령어를 사용하여 이동한 후

현재 디렉토리(.)로 /etc/passwd 파일을 복사해오기 위해 명령어 cp를 사용한다.

 

위와 같이 ls를 통해 password라는 디렉토리가 홈 디렉토리에 생성된 것을 볼 수 있고,

password 디렉토리로 이동한 후 ls로 파일 목록을 확인하면 passwd라는 파일이 잘 복사된 것을 확인할 수 있다.

 

< 실습 2 >

c 파일을 매개변수로 받아 컴파일 하여 실행해주는 스크립트 작성하기

 

vi 편집기로 param2.sh라는 파일에 인터프리터를 알려준 후

c 파일을 매개변수로 받아 컴파일 하기 위해 gcc $1을 입력해준다. ($1은 매개변수1을 의미한다.)

또한 a.out을 실행시키기 위해 echo $( )를 입력해준다.

 

vi 편집기로 hello.c라는 파일에 위와 같은 내용을 입력해준다.

 

param2.sh라는 파일에 실행 권한을 부여해준 후 hello.c라는 매개변수를 실행시킬 수 있도록 입력해주면

Hello Linux라는 hello.c의 파일 내용이 잘 출력되는 것을 확인할 수 있다.

 

 

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 4 - 3  (0) 2020.06.01
Linux Study Week 4 - 2  (0) 2020.06.01
Linux Study Week 3 - 3  (0) 2020.05.24
Linux Study Week 3 - 2  (0) 2020.05.24
Linux Study Week 3 - 1  (0) 2020.05.24

 < vi 편집기 > 

▶ vi의 세 가지 모드

모드 역할 및 특징
명령모드 - vi를 실행시키면 가장 먼저 접하는 기본이 되는 모드
- 커서의 이동, 수정, 삭제, 복사, 붙이기, 탐색 등을 한다.
- 입력모드 전환키인 i , a, o, I, A, O 등을 입력하면 입력모드로 전환되고
명령모드로 다시 전환하려면 [Esc]키를 누르면 된다.
입력모드
(Esc모드)
- 글자를 입력하는 문서를 만드는 모드
- 편집모드, input mode, insert mode 등으로 불린다.
- 명령모드에서 입력 전환키를 눌러서 전환하면 화면 아래에 '-- INSERT --'라고 표시된다.
콜론모드
(ex모드)
- 명령모드에서 ':'키를 입력했을 때 화면 맨 아랫줄에서 명령을 수행하는 모드
- 저장, 종료, 탐색, 치환, vi 환경설정 등의 역할을 한다.

 

▶ 입력모드

- 글자를 입력하기 위해서는 입력모드로 가야하는데, 'i'를 입력하면, 하단에 --INSERT--가 나오면서

글자를 입력할 수 있는 입력모드로 바뀐다.

※ 한/영 변환은 Shift + Spacebar를 입력하면 된다.

 

i 현재 커서의 위치부터 입력 I 현재 커서 줄의 맨 앞에서부터 입력
a 현재 커서의 위치 다음 칸부터 입력 A 현재 커서 줄의 맨 마지막부터 입력
o 현재 커서의 다음 줄에 입력 O 현재 커서의 이전 줄에 입력
s 현재 커서 위치의 한 글자를 지우고 입력 S 현재 커서의 한 줄을 지우고 입력

 

▶ 명령모드

- 입력모드에서 명령모드로 다시 전환하려면 Esc키를 누려면 된다.

- Esc키를 누르고 문자를 입력하려고 하면 비프음만 나고 입력은 되지 않는다.

- 명령모드는 편집모드라고도 하는데, 글을 입력시키는 방법이 아닌 수정과 편집을 할 수 있는 상태를 의미한다.

- 명령모드에서는 커서의 이동, 수정, 삭제, 복사, 붙이기, 탐색 등의 작업이 이루어진다.

- 잘못된 명령을 내렸을 때 'u'라는 명령어를 통해서 Undo, 즉 복구가 가능하게 할 수 있다.

 

G 파일의 맨 끝으로 ^ 현재 줄의 맨 앞으로 (빈칸무시)
0 현재 줄의 맨 앞으로 $ 현재 줄의 맨 뒤로
% 짝을 이루는 기호 확인 w 다음 단어로
b 이전 단어로 e 현재 단어의 끝 글자

 

▶ 콜론모드

- 명령모드에서 콜론모드로 전환하려면 Esc를 누른 후 ':' 명령을 실행시키면 된다.

- 콜론모드는 vi에서 사용할 수 있는 명령어들을 이용하는 곳이다.

- 윈도우 환경에서의 메뉴바와 같은 역할을 한다고 볼 수 있다.

- 파일 저장, 종료, 탐색, 치환, vi 환경설정 등의 역할을 한다.

 

:wq 편집한 데이터를 저장하고 종료
:q! 저장하지 않고 강제로 종료
:w vi를 끝내지 않고 현재 작업 중인 내용을 저장

 

▶ 정규표현식의 특수 기호들

. 한글자를 대표하는 기호 * 여러개의 문자를 동시에 대표하는 기호
^ 줄의 처음시작 $ 줄의 맨끝
% 처음줄부터 끝줄까지 \ 특수한 기호들이 가지는 뜻을 없앨 때 사용
\< 단어의 시작과 대응 \> 단어의 끝과 대응
[^] 묶여진 문자를 제외한 아무것이나 대응 \ 이어지는 기호를 문자 그대로 해석
[] 일정한 제한을 두어 글자를 대표하고자 하는 기호 [AB] A 또는 B

 

▶ 커서 움직이기

- 커서 이동은 키보드의 4개 화살표를 이용해서 이동해도 되지만, 기본적인 것은 빠르게 쓰기 위해 알아두도록 한다.

 

h 커서를 왼쪽으로 한 칸 이동 j 커서를 아래로 한 칸 이동
k 커서를 위로 한 칸 이동 l 커서를 오른쪽으로 한 칸 이동
w 다음 단어의 처음으로 이동 ^ 줄의 첫 문자로 이동
$ 현재 줄의 맨 끝으로 이동
(:$은 줄의 제일 끝으로 이동)
0 현재 줄의 처음으로 이동
(:0은 줄의 제일 처음으로 이동)
G 제일 끝 행으로 이동 gg 제일 첫 행으로 이동
nG n번째 행으로 이동 :숫자 + enter 해당 숫자의 행으로 이동
H 화면의 첫 줄로 이동 M 화면의 중간으로 이동
L 화면의 끝 줄로 이동 [ctrl] + b 이전 화면으로 이동
[ctrl] + d 반 정도 화면 이동 [ctrl] + f 다음 화면으로 이동
[ctrl] + e 커서는 현재 위치 그대로,
화면만 한줄씩 위로 이동
n% 입력한 n%에 해당하는 줄로 이동

 

▶ 편집하기

x 현재 커서가 위차한 문자를 삭제 dw 단어 삭제
dd 현재 커서의 행 삭제 숫자 dd 현재 커서부터 숫자만큼의 행을 삭제
yy 현재 커서가 있는 행을 복사 숫자 yy 현재 커서부터 숫자만큼의 행을 복사
p 복사한 내용을 현재 행 이후에 붙여넣기 P 복사한 내용을 현재 행 이전에 붙여넣기
u 직전에 내린 명령을 취소 U 현재 줄을 저장
 /exp + enter 'exp'와 같은 문자열을 현재 커서가 위치한 곳부터 아래 방향으로 검색 ?exp + enter 'exp'와 같은 문자열을 뒤에서부터
위 방향으로 검색
n 찾은 문자 중에서 다음 문자로 이동 N 찾은 문자를 이전 문자로(아래에서 위로) 이동

 

 

이외에도 vi편집기에서 사용되는 명령어들은 아주 많은데 기본적으로 리눅스 활용도를 높이기 위해 알아두면 좋을 것 같다.

필요한 명령어들은 그때그때 찾아서 활용하도록 한다.

출처 : kms0209.tistory.com/76

 

▶ 실습

 

- 입력모드

 

i를 누르면 하단에 -- INSERT -- 가 나오고 현재 커서의 위치부터 입력된다.

 

o를 누르면 현재 커서의 다음 줄부터 입력된다.

 

커서를 위 그림처럼 두었을 때

 

S를 누르면 현재 커서 위치의 한 줄을 지우고 입력된다.

 

 

- 명령모드

 

int main() 끝에 커서를 두고 0을 입력하면 현재 줄의 맨 앞으로 이동한다.

 

int main() 끝에 커서를 두고 w를 입력하면 다음 단어로 이동한다.

 

 

- 콜론모드

 

:wq를 입력하면 편집한 데이터를 저장하고 vi 편집기가 종료된다.

 

test.c 파일의 내용을 출력해보면 vi 편집기에서 입력했던 내용이 잘 들어가 있음을 확인할 수 있다.

 

:q!를 입력하면 편집한 데이터를 저장하지 않고 강제로 종료된다.

 

test.c 파일의 내용을 확인해보면 위에서 편집한 데이터가 저장되지 않은 것을 볼 수 있다.

 

 

- 커서 움직이기

 

위의 그림과 같이 커서의 위치를 고정하고 실습하도록 하자.

 

j를 누르면 커서가 아래로 한 칸 이동한다.

 

^를 누르면 커서가 그 줄의 첫 문자로 이동한다.

 

:숫자를 입력하고 enter키를 누르면 커서가 입력한 숫자의 행으로 이동한다.

 

ctrl키를 누른 후 e를 누르면 커서는 현재 위치 그대로 두고, 화면만 한줄씩 위로 이동한다.

커서가 i에 위치하고 있었기 때문에 화면이 한 줄 올라가면서 커서는 {에 위치하게 된다.

 

 

- 편집하기

 

화면 하단에 ?문자나 문자열을 입력하고 enter키를 누르면 입력한 문자나 문자열을 아래에서 위로 검색해준다.

 

커서를 int main()의 끝에 두고 dd를 입력하면 현재 커서의 행을 삭제한다.

 

커서를 main의 n에 두고 x를 입력하면 현재 커서가 위치한 문자(=n)를 삭제한다.

 

 

 

 

 

 

 

 

 

 

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 4 - 2  (0) 2020.06.01
Linux Study Week 4 - 1  (0) 2020.06.01
Linux Study Week 3 - 2  (0) 2020.05.24
Linux Study Week 3 - 1  (0) 2020.05.24
Linux Study Week 2 - 4  (0) 2020.05.18

1. 루트 디렉토리, /home 디렉토리, 사용자 홈 디렉토리(~) 의 아이노드 번호와 링크 수 확인

 

※ 모든 디렉토리는 항상 두 개의 항목( 자기자신(.) , 부모 디렉토리(..) )을 가지고 있다.

※ 모든 디렉토리의 기본적인 링크수는 2이다.

※ ls -ali라는 명령어를 이용하여 다음 그림과 같이 모든 파일의 상세 정보와 아이노드 번호를 출력하고,

아이노드 번호와 링크 수를 확인한다.

 

- 루트 디렉토리

 

- /home 디렉토리

 

- 사용자 홈 디렉토리(~)

 

 

2. 사용자 홈 디렉토리(~)에 week3 디렉토리 생성

 

mkdir을 이용하여 week3 디렉토리를 생성한다.

 

stat을 이용하여 파일의 메타 정보를 출력한다.

※ stat[파일명] → 크기, 파일타입, 장치, 하드링크수, 접근권한, 소유자, 그룹, 접근시간, 수정시간 등을 알 수 있다.

 

 

3. week3 디렉토리에 test.txt 파일 생성

 

touch로 test.txt라는 파일을 생성한다

ls명령어를 이용하여 파일 목록을 확인할 수 있고 현재 test.txt 파일의 하드링크 수는 1개임을 확인할 수 있다.

 


4. week3 디렉토리에 test.txt 파일의 하드 링크 파일 hd.test 파일 생성

 

ln 원본파일명 하드링크파일명 → test.txt 파일의 하드 링크 파일 hd.test 파일을 생성한다.

hd.test와 test.txt의 아이노드 번호는 같고 하드링크 수는 1 증가하여 2개임을 확인할 수 있다.

※ 원본 파일과 하드링크 파일은 같은 아이노드 번호를 공유한다.

 

vi 편집기로 hd.test파일에 hello world를 입력한 후 cat을 이용하여 파일 내용을 출력해보면 test.txt와 hd.test 둘 다 동일한 내용이 출력되는 것을 볼 수 있다.

 

위와 같이 aa와 bb파일을 생성했을 때 하드링크 수가 증가하는 것을 확인할 수 있다.

 

vi 편집기로 hd.test의 내용을 hello swing으로 편집한 후 test.txt의 파일 내용을 출력하면 hello swing이 출력되는 것을 확인할 수 있다. 또한 test.txt 파일을 삭제한 후 hd.test의 파일 내용을 출력했을때, 출력이 가능함을 확인할 수 있다.

 

 

5. week3 디렉토리에 test.txt 파일의 심볼릭 링크 파일 ls.test 파일 생성

 

ln -s 원본파일명 심볼릭링크파일명 → test.txt 파일의 심볼릭 링크 파일 ls.test 파일을 생성한다.

심볼릭 링크 파일이 파란색 글씨로 생성된 것을 볼 수 있고 원본 파일과 심볼릭링크 파일의 아이노드 번호가 다르다는 것을 확인할 수 있다.

 

test.txt 파일을 삭제했을 때 아무런 문제가 나타나지 않던 하드링크와 다르게 심볼릭 링크는 ls.test 파일의 글씨가 빨간색으로 바뀐 것을 볼 수 있고 ls.test 파일의 내용을 출력하지 못하는 것을 확인할 수 있다.

 

 

파일 시스템의 논리적 구조 작성하기

 

1. 루트 디렉토리, /home 디렉토리, 사용자 홈 디렉토리(~) 의 아이노드 번호와 링크 수 확인

 

- 루트(/) 디렉토리

루트 디렉토리 이외에 아무것도 없다면 위와 같은 그림을 그릴 수 있다.

 

 

stat 명령어를 이용하여 루트 디렉토리의 아이노드 번호와 링크 수를 확인할 수 있다.

이를 이용하여 루트 디렉토리의 논리적 구조를 그리면 다음 그림과 같다.

 

 

- /home 디렉토리

 

 

stat 명령어를 이용하여 홈 디렉토리의 아이노드 번호와 링크 수를 확인할 수 있다.

이를 이용하여 홈 디렉토리의 논리적 구조를 그리면 다음 그림과 같다.

 

 

- 사용자 home 디렉토리 (~)

 

 

stat 명령어를 이용하여 사용자 홈 디렉토리의 아이노드 번호와 링크 수를 확인할 수 있다.

이를 이용하여 사용자 홈 디렉토리의 논리적 구조를 그리면 다음 그림과 같다.

 

 

2. 사용자 홈 디렉토리(~)에 week3 디렉토리 생성

 

 

stat 명령어를 이용하여 사용자 홈 디렉토리에 생성한 week3 디렉토리의 아이노드 번호와 링크 수를 확인할 수 있다.

 

위의 그림과 같이 사용자 홈 디렉토리 엔트리에 week3 디렉토리가 추가된다.

week3 디렉토리의 아이노드 블록과 데이터 블록이 생성되고 week3 디렉토리 아이노드의 포인터는 week3의 데이터 블록을 가리킨다.

 

 

3. week3 디렉토리에 test.txt 파일 생성

 

week3 디렉토리에 test.txt 파일을 생성하면 week3디렉토리 엔트리에 test.txt가 추가된다.

이 때, test.txt 파일의 내용은 Hello world이다.

 

 

4. week3 디렉토리에 test.txt 파일의 하드 링크 파일 hd.test 파일 생성

 

week3 디렉토리에 하드링크 파일 hd.test 파일을 생성하면 week3 디렉토리 엔트리에 hd.test 파일이 추가된다.

이 때, 하드링크 파일 hd.test와 원본 파일 test.txt의 아이노드 번호는 동일하다.

또한, 하드링크 파일이 추가되었기 때문에 원본 파일의 링크 수가 증가한다.

 

 

5. week3 디렉토리에 test.txt 파일의 심볼릭 링크 파일 ls.test 파일 생성

 

 

week3 디렉토리에 심볼릭링크 파일 ls.test 파일을 생성하면 week3 디렉토리 엔트리에 ls.test 파일이 추가된다.

이 때, 소프트 링크 파일의 아이노드가 생성되고 소프트 링크 파일의 데이터 블록에 원본 파일의 경로가 저장된다.

또한, 원본 파일의 링크 수는 바뀌지 않는다.

 

 

 

 

 

 

 

 

'2020-1 STUDY > Linux Study' 카테고리의 다른 글

Linux Study Week 4 - 1  (0) 2020.06.01
Linux Study Week 3 - 3  (0) 2020.05.24
Linux Study Week 3 - 1  (0) 2020.05.24
Linux Study Week 2 - 4  (0) 2020.05.18
Linux Study Week 2 - 3  (0) 2020.05.18

+ Recent posts