< MySQL DB 연동 >

 

< 데이터베이스, 테이블 생성 >

 

MySQL과 php를 연동하기 위해서는 MySQL에 사용할 데이터베이스와 테이블이 있어야 한다.

나는 create database mydb; -> use mydb; 라는 명령어를 이용하여 'mydb'라는 데이터베이스를 만들고

create table member(~); 라는 명령어를 이용하여 위와 같이 'member'라는 테이블을 생성했다.

 

desc member;라는 명령어로 'member'라는 테이블 안에 있는 모든 데이터가 위와 같이 생성된 것을 확인할 수 있다.

 

로그인과 회원가입 기능을 사용하기 위해 insert into ~ 명령어를 이용하여 미리 위와 같은 값을 임의로 생성했다.

select *from member;라는 명령어로 현재 필드에 위와 같은 값들이 저장되어 있는 것을 확인할 수 있다.

 

< 로그인 >

 

1. MySQL 연결

-> $con=mysqli_connect("localhost","root","비밀번호","mydb") or die("error");

-> 이때 비밀번호는 프로그램을 처음 설치할때 설정했던 비밀번호를 입력하면 된다.)

2. input으로 입력 받은 id, pw 값 받기

-> $id=$_POST['id']; $pw=$_POST['pw'];

-> login.html에서 입력받은 아이디와 비밀번호 값을 POST방식으로 받아왔다.

3. select 쿼리문

-> $query="select *from member where id='$id'";

-> 'member'라는 테이블에 입력받은 아이디가 존재하는지를 확인하기 위해 위와 같은 명령어를 'query'라는 변수에 저장한다.

4. 쿼리 결과 비교

-> 조건문 if($count>0)이라는 것은 현재 필드에 해당 아이디가 존재한다는 의미이다.

-> mysqli_fetch_assoc() 함수는 mysqli_query를 통해 얻은 result값에서 레코드를 1개씩 리턴해주는 함수이다.

-> $row=mysqli_fetch_assoc($result);아이디가 존재하는 경우 비밀번호가 일치하는지 확인한다.

-> 비밀번호가 맞다면 세션 생성 후 index.php로 이동, 비밀번호가 다르다면 "비밀번호가 일치하지 않습니다"라는 문구 출력

-> if($count>0)이 아니라면 필드에 존재하는 아이디 없다는 의미, "입력하신 아이디를 찾을 수 없습니다"라는 문구 출력

5. MySQL 연결 해제

-> mysqli_close($con);

 

1) 아이디가 존재하지 않는 경우

 

현재 필드에는 'cc'라는 아이디가 존재하지 않는다.

위와 같이 입력한 후 로그인 버튼을 누르면 결과는 다음과 같다.

 

위와 같이 존재하지 않는 아이디로 로그인을 시도했을 경우에는 '입력하신 아이디를 찾을 수 없습니다.'

라는 에러 문구가 나오는 것을 확인할 수 있다.

 

2) 비밀번호가 일치하지 않는 경우

 

현재 필드에 'jihyun'이라는 아이디로 저장된 비밀번호는 '1234'이다.

위와 같이 비밀번호를 다르게 입력한 후 로그인 버튼을 누르면 결과는 다음과 같다.

 

위와 같이 해당 아이디의 비밀번호와 일치하지 않는 경우, 즉 아이디는 존재하나 비밀번호가 다른 경우로 로그인을 시도하는 경우에는 '비밀번호가 일치하지 않습니다.'라는 에러 문구가 나오는 것을 확인할 수 있다.

 

3) 아이디와 비밀번호가 모두 일치하는 경우

 

현재 필드에 'def'라는 아이디가 존재하고 이 아이디의 비밀번호는 '2222'이다.

위와 같이 입력한 후 로그인 버튼을 누른 결과는 다음과 같다.

 

위와 같이 아이디와 비밀번호가 모두 일치하도록 로그인을 한다면 index.php 파일로 넘어가는 것을 확인할 수 있고

'로그인 되었습니다'라는 문구와 함께 필드에 저장된 name, id, pw 값이 잘 출력되는 것을 확인할 수 있다.

 

< 회원가입 >

 

1. MySQL 연결

-> $con=mysqli_connect("localhost","root","비밀번호","mydb") or die("error");

-> 이때 비밀번호는 프로그램을 처음 설치할때 설정했던 비밀번호를 입력하면 된다.)

2. input으로 입력 받은 id, pw 값 받기

-> $id=$_POST['id']; $pw=$_POST['pw']; $name=$_POST[name]; $email=$_POST[email];

-> signup.html에서 입력받은 아이디, 비밀번호, 이름, 이메일 값을 POST방식으로 받아왔다.

3. select 쿼리문

-> $query="select *from member where id='$id'";

-> 'member'라는 테이블에 입력받은 아이디가 존재하는지를 확인하기 위해 위와 같은 명령어를 'query'라는 변수에 저장한다.

4. 쿼리 결과 비교

-> 조건문 if($count>0)이라는 것은 현재 필드에 해당 아이디가 존재한다는 의미로 "회원가입 실패"라는 문구 출력

-> 조건문 if($count>0)이 아닐 경우 현재 필드에 존재하는 아이디 없다는 의미

-> 회원가입 페이지에 있는 모든 정보들을 입력했는지 안했는지 확인

-> if($id==""||$pw==""||$name==""||$email=="") 만약 하나라도 입력하지 않은 정보가 있다면 "빈칸 없이 작성해주세요"문구 출력

-> 현재 필드에 중복되는 아이디가 아니며 빈칸 없이 모두 입력했을 경우 입력한 정보를 확인시켜 주는 메세지 출력

5. MySQL 연결 해제

-> mysqli_close($con);

 

1) 중복된 아이디가 존재하는 경우

 

현재 필드에는 'jihyun'이라는 아이디가 존재한다.

회원가입 페이지에서 위와 같이 중복된 아이디를 입력한 후 가입하기 버튼을 누르면 결과는 다음과 같다.

 

위와 같이 중복된 아이디로 회원가입을 시도할 경우 '회원가입 실패'라는 에러 메세지가 뜨는 것을 확인할 수 있다.

 

2) 하나라도 입력하지 않은 정보가 있는 경우

 

회원가입 페이지에서 이메일에 아무것도 적지 않은 채로 가입하기 버튼을 누른 결과는 다음과 같다.

 

회원가입 시 하나라도 입력하지 않은 정보가 있을 경우에는 위와 같이 '빈칸 없이 작성해주세요'라는

에러 메세지가 뜨는 것을 확인할 수 있다.

 

3) 회원가입이 완료된 경우

 

현재 필드에는 'swu'라는 아이디가 존재하지 않으며 위의 경우에는 빠짐 없이 모든 정보들을 입력한 상태이다.

회원가입 페이지에 위와 같이 입력한 후 가입하기 버튼을 누른 결과는 다음과 같다.

 

중복된 아이디가 존재하지 않으며 모든 정보를 입력한 경우에는 위와 같이 회원가입이 잘 된 것을 확인할 수 있고

입력한 정보를 확인시켜 주는 메세지가 뜨는 것을 확인할 수 있다.

 

또한 cmd 창에서 select *from member;라는 명령어를 통해 필드에 있는 모든 정보들을 출력해보면

위에서 회원가입에 성공했던 정보들이 잘 저장된 것을 확인할 수 있다.

'2020-2 STUDY > Web Study' 카테고리의 다른 글

Web Study week 2 - 3  (0) 2020.09.23
Web Study week 2 - 2  (0) 2020.09.23
Web Study week 1  (0) 2020.09.16

< 세션 >

 

▶ 세션이란?

 

 

출처 : https://medium.com/lotus-fruit/the-secret-life-of-browser-cookies-cc999e82dbf8

- 웹사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법

- 사용자가 브라우저를 닫아 서버와의 연결을 끝내는 시점

   즉, 사용자가 특정 웹사이트에 접속하여 머물러 있는 시간

- 사용자의 상태를 관리하기 위해 필요

   → 세션 ID를 이용하여 사용자의 정보를 유지 및 관리

- 서비스가 돌아가는 서버 측에 데이터를 저장하고 세션의 키값만을 클라이언트에 남겨둠

   → 브라우저는 필요할 때마다 이 키값을 이용하여 서버에 저장된 데이터 사용

- 보안에 취약한 쿠키를 보완해주는 역할

   ※ 쿠키 : 특정 웹사이트를 방문했을 때 만들어지는 정보를 담는 파일 -> 상태정보 유지 기술

 

▶ 쿠키와 세션의 차이점

 

쿠키 세션
키와 값이 들어 있는 작은 데이터 파일 세션아이디를 인증받고 정보를 이용
방문자의 정보를 방문자 컴퓨터의 메모리 또는 파일에 저장 방문자의 정보를 서비스가 돌아가고 있는 서버에 저장
이름, 값, 만료날짜, 시간, 경로정보 등이 들어있음 발급받은 세션아이디를 쿠키로 저장
파일에 저장될 경우 탈취, 변조될 위험이 있고
스니핑에 당할 위험이 있어 보안에 취약함
클라이언트 정보 자체는 서버에 저장되어 있어
비교적 보안에 강함
브라우저를 종료하더라도 저장되어 있을 수 있음 세션 쿠키에 세션 아이디를 정한 경우
브라우저 종료 시 세션 아이디 삭제가 가능함
서버 요청 시 헤더를 바로 참조하면 되므로 속도가 빠름 세션아이디를 통해 서버에서 데이터를 다시 참조해야 하므로
속도가 비교적 느림
자동로그인, 쇼핑몰 장바구니 등 로그인 정보 유지, 사용자 인증 등

참고 출처 : jeong-pro.tistory.com/80

 

▶ 세션 사용방법

 

① 세션 시작 

      - session_start() 함수 : 새로운 세션 시작 or 기존의 세션 다시 시작

                                                  : 스크립트의 최상단에 위치해야 함

                                                  : 세션 아이디의 존재여부 확인

                                                    → 존재 : 원래 있던 세션 변수 불러옴

                                                    → 존재 X : 새로운 아이디 생성

                                                    ※ 세션 아이디 : 웹 서버에 의해 무작위로 만들어진 숫자

                                                                                : 세션이 유지되는 동안 클라이언트 측에 저장

                                                                                : 세션 변수를 등록하는 키로 사용 

 

② 세션 변수 등록

      - $_SESSION["변수이름"] = " " : 세션 변수를 $_SESSION 배열에 등록

                                                                  : 세션 변수의 이름(키값)을 서버에 저장

                                                                  : 등록된 세션 변수는 한 세션이 끝날 때까지 유지

 

③ 세션 변수 접근

      - print_r($_SESSION) : 세션에 등록된 데이터 출력

                                                     ※ print_r() 함수 : 인수로 전달받은 변수의 정보를 읽기 쉬운 형태로 표시

 

④ 세션 등록 해지

      - unset($_SESSION["변수이름"] : 세션 데이터 중 특정 변수 삭제

      - session_unset() 함수 : 현재 등록된 모든 세션 변수 해지

      - session_destroy() 함수 : 세션 아이디 삭제 (세션 자체 종료)

 

▶ 세션 관리 옵션

 

옵션 의미
session.auto_start 자동으로 세션 시작
session.cache_expire 세션 유지 시간 설정
session.cookie_domain 다른 도메인 체계에 세션 변수 공유
session.cookie_lifetime 세션아이디에 대한 쿠키의 유지 정도 설정
session.cookie_path 세션 쿠키 설정 경로
session.name 쿠키 이름으로 사용되는 세션의 이름
session.save_path 세션 데이터가 저장되는 경로
session.cookie_secure 쿠키가 안전한 접속을 통해서만 전송되게 할것인지 설정
session.hash_function 세션아이디를 생성할 때 사용할 해쉬 알고리즘 설정

참고 출처 : intellegibilisverum.tistory.com/entry/%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80

             

'2020-2 STUDY > Web Study' 카테고리의 다른 글

Web Study week 5  (0) 2020.11.18
Web Study week 2 - 2  (0) 2020.09.23
Web Study week 1  (0) 2020.09.16

< GET과 POST >

 

▶ GET 방식

- 서버로부터 정보를 조회하기 위해 설계된 메소드이다.

- Idempotent하도록 설계되었다.

    → 서버에게 동일한 요청을 여러 번 전송하더라도 동일한 응답이 돌아와야 한다.

    → 주로 조회를 할 때 사용

- 입력데어터를 URL 정보에 붙여서 전송한다.

    ※ 쿼리스트링 : URL의 끝에 '?'와 함께 이름과 값으로 쌍을 이루는 요청 파라미터

    → 보안에 취약하다.

- 최대 데이터 길이는 256byte이다.

- 전송속도가 빠르다.

    → 전송해야할 데이터가 적을 때 이용한다.

- 예제

get.html get.php

 

▶ POST 방식

- 리소스를 생성/변경하기 위해 설계된 메소드이다.

- Non-idempotent하도록 설계되었다.

    → 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.

    → 서버의 상태나 데이터를 변경시킬 때 사용

- 입력한 데이터를 본문 안에 포함하여 전송한다.

    → 입력데이터가 URL 상에 보이지 않기 때문에 보안에 강하다.

- 입력 데이터의 개수나 크기에 제한이 없다.

    → 복잡한 형태의 자료를 전달할 때 유용하다.

- 예제

post.html post.php

'2020-2 STUDY > Web Study' 카테고리의 다른 글

Web Study week 5  (0) 2020.11.18
Web Study week 2 - 3  (0) 2020.09.23
Web Study week 1  (0) 2020.09.16

 < WEB과 HTML > 

 

▶ 웹이란?

- WWW(World Wide Web) : 인터넷에 연결된 사용자들이 서로의 정보를 공유할 수 있는 공간

- HTTP라는 프로토콜을 사용해 TCP/IP 네트워크에서 사용하기 시작

- 인터넷 상에서 멀티미디어 정보(그림, 소리, 영상 등)를 하이퍼텍스트 방식으로 연결하여 제공

 

▶ 웹의 구성요건

- HTML : 하이퍼텍스트 문서 작성을 위한 도구

- HTTP 프로토콜 : 웹 브라우저와 웹 서버 간 문서를 교환해주는 프로토콜

- URL : 요구하는 정보를 관리하는 사이트

 

▶ HTML이란?

- Hyper Text Markup Language

- 웹 페이지에서 다른 페이지로 이동할 수 있도록 하는 기능을 가진 문서를 만드는 언어

 

태그
<html> HTML 문서의 루트 요소
<head> HTML 문서의 메타데이터
<body> 웹브라우저를 통해 보이는 내용
<title> HTML 문서의 제목
<h1~6> 제목
<p> 단락

 

▶ 텍스트 요소

- 주석 : <!--주석내용-->

- 줄바꿈 : <BR>

- 줄바꿈 되지 않도록 함 : <NOBR>

- 엔티티 : HTML 예약어를 기존에 사용하던 의미 그대로 사용하기 위해 만든 문자셋

 

엔티티 이름 엔티티 문자 엔티티 이름 엔티티 문자
&nbsp; 공백 &amp; &
&lt; < &gt; >
&quot; " &apos; '
&#48; ~ &#57; 숫자 0 ~ 9 &#65; ~ &#90; 영문자 A ~ Z
&#91; ~ &#122; 영문자 a ~ z &#64; @

 

▶ <font> 태그

- 구조 : <font 속성1="값1" ···>내용</font>

 

속성 의미
color 글자 색 지정
size 글자 크기 지정
face 글씨체 지정

 

▶ <img> 태그 

- 구조 : <img src="이미지경로" width="" height="" border="" alt="대체문자열">

- <img> 태그는 종료 태그가 없음

 

▶ <table> 태그

 

태그
<tr> 테이블의 열을 구분
<th> 각 열의 제목
<td> 각각의 셀로 나누기

 

속성 의미 속성 의미
bgcolor 배경색 border 테이블 경계선 굵기
width 너비 height 높이
align 셀의 가로줄 정렬
(수평정렬)
left, center, right
valign 셀의 세로줄 정렬
(수직정렬)
top, middle, bottom
colspan 열 합치기 rowspan 행 합치기

 

▶ 폼(form)

- 웹브라우저를 통해 입력된 모든 데이터를 한번에 웹서버로 전송하는 양식

 

태그
form 폼 정의 (최상위 태그)
input 사용자 입력
select 항목 선택
textarea 여러 줄 입력

 

▶ <form> 태그

- 구조 : <form 속성1="값1"[속성2="값2" ···>내용</form>

- 단독으로 쓰이지 않고 다양한 정보를 입력하는 양식 포함

 

속성 의미
action 폼 데이터를 받아 처리하는 웹 페이지의 URL 설정
method 폼 데이터가 전송되는 HTTP 방식 설정
name 폼을 식별하기 위한 이름 설정

 

▶ <input> 태그

 

속성 속성 값 의미
type text 한 줄 텍스트 입력
radio 라디오 버튼 (하나만 선택)
checkbox 체크박스 (다중선택)
password 암호 입력
file 파일 선택
button 버튼 모양 출력
reset 초기화
submit 서버에 전송
name 텍스트 이름 설정
value 텍스트 초기값 설정

 

▶ <select> 태그

- 구조 : <select 속성1="값1"[속성2="값2" ···>

                          <option 속성1="값1"[속성1]>항목1</option>

                          ···

               </select>

- 여러 개 항목이 나타나는 목록 상자에서 항목 선택

 

속성 의미 속성 의미
name 상자 이름 value 항목 값 설정
multiiple 다중 선택 selected 초기값 설정

 

▶ <textarea> 태그

- 구조 : <textarea 속성1="값1" [속성2="값2" ···]>···</textarea>

- 여러 줄의 텍스트 입력

 

속성 속성 값 의미
name 텍스트 이름 설정
cols 숫자 텍스트 영역 너비
rows 숫자 텍스트 영역 높이
wrap off 줄바꿈 설정
soft 자동으로 행바꿈
hard 캐리지 리턴 문자 전달

 

 

 

 

'2020-2 STUDY > Web Study' 카테고리의 다른 글

Web Study week 5  (0) 2020.11.18
Web Study week 2 - 3  (0) 2020.09.23
Web Study week 2 - 2  (0) 2020.09.23

< 과제 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

+ Recent posts