딩코딩코딩 2023. 3. 21. 09:30

Day-11

## windows host….

윈도우 터미널에서…

> bash 
# vi .ssh/config
# exit

> ubuntu
# cd /mnt/c/Users/username/
# vi .ssh/config


# vi .ssh/config
# Virtualbox CentOS
 Host centos
  HostName 192.168.1.134
  User root

# Virtualbox Ubuntu
Host ubuntu
HostName 192.168.1.12
User root

# ssh centos

## centos…

# rpm -qa | grep openjdk (rpm -qa : 설치된 쿼리(찾기) openjdk로 되어 있는 것

# yum -y remove java (java 지울것, yum = yellowdog Updater Modified rpm 명령의 패키지 의존성 문제를 완전하게 해결한 프로그램. 인터넷을 통해서 필요한 파일을 저장소에서 자동을 모두 다운로드 해서 설치하는 방식

# yum -y remove java-1.8.0-openjdk-headless

# rpm -qa | grep openjdk



# ssh ubuntu

## ubuntu..

# apt -y update; apt -y upgrade


### jdk1.8 - CentOS, Ubuntu

## Your Host computer…

# scp jdk-8u361-linux-x64.tar.gz root@192.168.1.12:/tmp (oracle 환경상 바로 wget할 수 없음 , 그래서 사이트에서 링크 가져와서 다운로드함)

## Ubuntu / Centos….

# mkdir -p /usr/java

# cd /usr/java

# mv /tmp/jdk-8u361-linux-x64.tar.gz . (압축파일 불러오기)

# tar xvzf jdk-8u361-linux-x64.tar.gz (tar xvzf로 압축을 푸는 것)

# rm -rf *.tar.gz

# mv jdk1.8.0_361/ jdk1.8 (압축푼 파일이 나옴) mv 를 이용해서 _361 에서 1.8로 바꿈)

# ls

# vi /etc/profile
## centos…
     87 #Java1.8
     88 export JAVA_HOME=/usr/java/jdk1.8 (Java는 Java_home이라는 export가 필요홈, JAVA_Home 은 환경변수임)
     89 export CLASSPATH=$CLASSPATH:$JAVA_HOME/jar/lib/ext:$JAVA_HOME/lib/tools.jar (JAVA는 ClassPath도 필요함 기존에 다른 곳에서도 사용할 수 있어서, 새롭게 정의한 lib/ext lib/tools를 추가하겠다는 의미)) 
     90 export PATH=$PATH:$JAVA_HOME/bin (기존 PATH에 추가한 것을 적용해라)
[root@centos /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/java/jdk1.8/bin:/root/bin (usr/java/jdk1.8/bin: /을 뺴먹으면 java밖에 사용할 수 없음, 꼭 들어갔는지 확인하기)


## ubuntu….
     29 #Java1.8
     30 export JAVA_HOME=/usr/java/jdk1.8
     31 export CLASSPATH=$CLASSPATH:$JAVA_HOME/jar/lib/ext:$JAVA_HOME/lib/tools.jar
     32 export PATH=$PATH:$JAVA_HOME/bin


# source /etc/profile (창 안끄고 바로 적용이 가능)

# source ~/.bashrc (개인적으로 프롬프트에서 적용하면 날라가서 , 다시 적용한 것임)

# javac -version

# cd /allnew/java

# javac gugudan.java

# java gugudan
Insert number(0:Exit) : 4
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
Insert number(0:Exit) : 0


## ububntu…..

# cd /allnew

# rm -rf java/*.class

# git add .

# gi t commit -m “class delete”

# git push


## centos….

# git fetch

# git pull


## ububntu…..

# vi .gitignore
      1 # .gitignore
      2
      3 ## c programing
      4 c/**/a.out
      5 c/**/hello
      6 c/**/*.o
      7 c/**/test
      8
      9 ## java
     10
     11 java/*.class

# git add .

# gi t commit -m “.gitignore update”

# git push


## centos….

# git fetch

# git pull


## github desktop에서도 fetch 한번 하세요..


## atom editor…

## c 아래에 program 폴더 생성

### Quiz1 - even / odd

program : quiz1.c
lib name : libcheckeod.a
lib header : libcheckeod.h
lib source : checkeod.c

## program 아래에 lib 폴더 생성

## lib/libcheckeod.h
int checkeod (int);

## checkeod.c
int checkeod (int x) {
  if (x % 2 == 0)   (% 나머지 모듈레이션, 남은 값)
    return 0;
  else
    return 1;
}

# gcc -c checkeod.c (c생성)

# ar r libcheckeod.a checkeod.o 

# ar rs libcheckeod.a (새롭게 정보 추가)

# mv libcheckeod.a lib

## quiz1.c
#include <stdio.h> (시스템 라이브러리) 
#include "libcheckeod.h" (사용자정의 라이브러리)

void main() {
  int n;
  printf("Input Number : ");
  scanf("%d", &n);
  if(checkeod(n) == 0)    (return= 0 이면 even, return이 1이면 odd)
    printf("%d is even number~!! \n", n);
  else
    printf("%d is odd number~!! \n", n);
}

# gcc -o quiz1 quiz1.c -I ./lib -L ./lib -lcheckeod -L 라이브러리가 있는 경로,  lcheckod (li로 시작하고 a로 끝나는걸 제외한 것을 불러들여오겠다)

# ./quiz1
Input Number : 5
5 is odd number~!!

# ./quiz1
Input Number : 6
6 is even number~!!



### Quiz2 - prime number

program : quiz2.c
lib header : libcheckprime.h
lib name : libcheckprime.a
lib source : checkprime.c

## lib/libcheckprime.h
int checkprime(int);


## checkprime.c
int checkprime(int n) {
  int i;
  for (i=2; i <= n; i++) {
    if (n%i == 0)
      break;
    else
      continue;
  }
  return i;
}


## quiz2.c
#include <stdio.h>
#include "libcheckprime.h"

void main()
{
while (1) (break를 통해서 중단하기 위해, 1을 사용한 이유)
{
int n;
printf("\ninput integer => ");
scanf("%d", &n);
if (n == 0) break;
    if (checkprime(n) == n)
printf("%d is a prime number \n", n);
else
      printf("%d is not prime number \n", n);
}
}


# gcc -c checkprime.c

# ar r libcheckprime.a checkprime.o 

# ar rs libcheckprime.a

# mv libcheckprime.a lib

 

# gcc -0 quiz2 quiz2.c -l ./lib -L ./lib -lcheckprime  (컴파일 하는 이유)

# ./quiz2

input integer => 5
5 is a prime number

input integer => 4
4 is not prime number

input integer => 5
5 is a prime number

input integer => 6
6 is not prime number

input integer => 0


## shell scripts

# cd /allnew/shells

## hello.sh

    1 #!/bin/bash (쉘스크립트는 항상 첫줄에 #!/bin/bash 가 들어감, csh은 #!/bin/csh이 들어갈 것)
      2
      3 echo Hello Shell Scirpt~!!

# chmod +x *.sh (chmod + ax (all이 생략됨) 

# ./hello.sh


## str.sh

      1 #!/bin/bash
      2
      3 STR="Have a nice day!!"
      4 echo $STR
      5

# !ch

# ./str.sh


## if.sh

      1 #!/bin/bash
      2
      3 man=10 (integer, number변수)
      4 woman=20
      5
      6 if [ $man -lt $woman ]
      7 then
      8         echo woman
      9 fi
     10
gt / lt / ge/ le/ ne/ eq
# !ch

# ./if.sh


# cp if.sh if1.sh

## if1.sh

      1 #!/bin/bash
      2
      3 echo "File name : $0 "
      4 echo "Parameter Count : $# "
      5 echo "All parameter : $@ "   (string이나 list로 들어감)
      6
      7 if [ “$1” = ok ]; then  ("$1 = string이기 때문에, 숫자가 아님)
      8         echo "good~!"
      9 else
     10         echo "bad~!"
     11 fi

# !ch

# ./if1.sh

# ./if1.sh ok

# ./if1.sh bad

# ./if1.sh ok bad


## ifelif.sh
      1 #!/bin/bash
      2
      3 a=0   (숫자변수임)
      4
      5 echo -n "Input : "   (echo -n = echo -new)
      6 read a (a = 숫자가 아닌 문자, input 으로 값을 받으니깐)
      7
      8 if [ $a -ge 90 ]; then 
      9         echo A
     10 elif [ $a -ge 80 ]; then
     11         echo B
     12 elif [ $a -ge 70 ]; then
     13         echo C
     14 elif [ $a -ge 60 ]; then
     15         echo D
     16 else
     17         echo F
     18 fi
     19 echo "Thank you~ bye!"
     20

# !ch

# ifelif.sh
Input : 89
B
Thank you~ bye!


## case.sh
      1 #!/bin/bash
      2
      3 case "$1" in  ($1 1번째 매개변수를 받았을떄)
      4         ko) echo "Seoul" ;;
      5         us) echo "Washington" ;;
      6         cn) echo "Beijing" ;;
      7         jp) echo "Tokyo" ;;
      8         *)  echo "Enter the contry name~!!"   (   *) 4개를 뺀 나머지는 이렇게 출력하겠음 , default)
      9 esac
     10

# !ch


# ./case.sh
Enter the contry name~!!

# ./case.sh ko
Seoul

# ./case.sh jp
Tokyo

# ./case.sh uk
Enter the contry name~!!


# cp case.sh case_new.sh

# ./case_new.sh
     1 #!/bin/bash
     2
     3 if [ $# -eq 0 ]; then    (eq 0 = 파라미터의 값이 없는 것)
     4 echo "Enter the contry name~!!"
     5 else
     6 case "$1" in
     7 ko)
     8 echo "Seoul" ;;
     9 us)
    10 echo "Washington" ;;
    11 cn)
    12 echo "Beijing" ;;
    13 jp)
    14 echo "Tokyo" ;;
    15 *)
    16 echo "Your entry => $1 is not in the list."  (4개가 아니면)
    17 esac
    18 fi

# !ch

# ./case_new.sh

## for.sh
      1 #!/bin/bash
      2
      3 for k in L I N U X
      4 do
      5         echo -n "$k" (echo는 new라인이 필요할때 습관적으로 넣어야함)
      6 done
      7 echo


# !ch

# for.sh

# cp for.sh for1.sh

## for1.sh
      1 #!/bin/bash
      2
      3 for k in L I N U X (아래로 나올 것임)
      4 do
      5         echo "$k"
      6 done


# !ch

# for1.sh


## for2.sh
      1 #!/bin/bash
      2
      3 row="one two three"
      4
      5 for mon in $row; do ($row 3개의 반복적은 문자열)
      6         for ((i=0; i<9; i++)) do
      7                 echo "$mon $i"
      8         done
      9 done
     10
##바깥 쪽 for는 3번 안쪽은 9번 돌아 27번 반복
# !ch

# ./for2.sh


## while.sh
      1 #!/bin/bash
      2
      3 a=1
      4
      5 while [ $a != "0" ]; do
      6         echo -n "input : "
      7         read a
      8
      9         if [ $a != "0" ]; then
     10                 for k in 1 2 3 4 5 6 7 8 9
     11                 do
     12                         echo " $a * $k = `expr $a \* $k `" (양쪽 백틱, \* 입력받은 숫자와 곱하기) 
     13                 done
     14         fi
     15 done
     16 echo Exit

# cp while.sh while_new.sh

## while_new.sh

      1 #!/bin/bash
      2
      3 a=1
      4
      5 while [ $a != "0" ]; do
      6         echo -n "input : "
      7         read a
      8
      9         if [ $a != "0" ]; then
     10                 for ((k=1; k<=9; k++)) do
     11                         echo " $a * $k = `expr $a \* $k `"
     12                 done
     13         fi
     14 done
     15 echo Exit



## while2._sh

     1 #!/bin/bash
     2
     3 a=1
     4
     5 while [ $a != "0" ]; do
     6 echo -n "input : "
     7 read a
     8
     9 if [ $a -eq 0 ]; then
    10 break;
    11 elif [ $a -eq 1 ]; then
    12 echo "The number of inputs must be between 2 and 9."
    13 elif [ $a -gt 9 ]; then
    14 echo "The number of inputs must be between 2 and 9."
    15 else
    16 for ((k=1; k<=9; k++)) do
    17 echo " $a * $k = `expr $a \* $k `"
    18 done
    19 fi
    20 done
    21 echo Exit


## while3.sh
     1 #!/bin/bash
     2
     3 a=1
     4
     5 while [ $a != "0" ]; do
     6 echo -n "input : "
     7 read a
     8
     9 if [ $a -eq 0 ]; then
    10 break;
    11 elif [ $a -eq 1 -o $a -gt 9 ]; then    ( -o 는 or 연산)
    12 echo "The number of inputs must be between 2 and 9."
    13 else
    14 for ((k=1; k<=9; k++)) do
    15 echo " $a * $k = `expr $a \* $k `"
    16 done
    17 fi
    18 done
    19 echo Exit


## while4.sh

      1 #!/bin/bash
      2
      3 row=$1
      4
      5 if [ $# -eq 0 ]; then
      6         echo "This program is have to one parameter~!!"
      7 else
      8         while [[ 10 -gt $row ]]; do  (앞에 변수가오고 뒤에 상수가 와야함)
      9                 echo $row
     10                 row=`echo "$row"+1|bc` (echo는 bc row + 1을 전달해주는 것, bc의 입력값)
     11         done
     12 fi

# !ch

# ./while4.sh
This program is have to one parameter~!!

# ./while4.sh 6
6
7
8
9