Study/class note

리눅스 / 프로세서 관리 명령어, 쉘 스크립트, if문

chanzae 2022. 3. 21. 17:14

33 리눅스 프로세서 관리 명령어

 

프로세서 관리 명령어를 알아둬야 하는 이유?

1. 리눅스에서 실행한 프로그램이 잘 수행되고 있는지 확인하고자 할 때

 mariaDB 시작
# systemctl start mariadb

이 명령어를 우리가 직접 수행함. 아침마다 리눅스 서버를 키고 위의 명령어를 실행함.

그런데 보통 기업에서는 리눅스 서버가 24시간 켜있음. 그러다 보니 혹시 리눅스의 마리아 디비가 다운되었다라고 하면 접속이 안됨. 그럴때 마리아 디비에서 수행되고 있는 프로세서들이 잘 수행되고 있는지 리눅스 명령어로 확인해야함.

 

2. 리눅스에서 어떤 작업을 하고 있는데 속도가 너무 느리면 이유를 찾아야하는데 그 이유의 대부분이 서버에서 과도한 cpu를 사용하는 프로그램이 돌고 있을 때.

 

>리눅스 프로세서 관리 명령어 : top 명령어, ps 명령어, kill 명령어, jobs 명령어

 

 top 명령어

"지금 현재 작동중인 프로세서들의 cpu 사용율과 메모리 사용율을 확인하는 명령어"

내가 수행한 파이썬 프로그램이 cpu를 얼마나 많이 사용하고 있는지 확인하고 싶을 때 또는 내가 혹시 잘못 프로그래밍해서 무한루프를 돌렸거나 해서 리눅스의 자원을 많이 사용하고 있다면 문제가 발생하는 것이므로 top 명령어로 확인해 볼 필요가 있음.

 

[root@localhost ~]# top

PID : 프로세서 ID

PR : 우선순위

NI : 친절도

%CPU : CPU용량

%MEM : 메모리용량

COMMAND : 사용 프로그램

 

 

예제1. 주피터 노트북을 열어서 숫자 1~1000000000000000000000000을 출력하는 파이썬 프로그램을 실행하고 putty창을 열어 top을 수행합니다. 

 

3009 프로세서가 cpu를 80% 이상 사용하고 있음. 이 정도는 문제될 것 없고, cpu를 100% 사용하고 있다면 리눅스 서버가 전반적으로 느려짐. 

 

 

kill 명령어

예제2. 지금 cpu를 과도하게 사용하고 있는 oracle유저 프로세서 3009를 kill 시키시오.

[root@localhost ~]# kill 3009

 

파이어폭스도 kill시키세요.

[root@localhost ~]# kill 3009

 

root는 최상위관리자라서 oracle 실행프로그램을 kill 시킬 수 있지만 oracle에서는 root의 프로그램을 kill 시킬 수 없음.

 

 

ps 명령어

"현재 시스템에서 수행되고 있는 프로세서의 정보를 표시하는 명령어"

# 문법
# ps 옵션 프로세서번호

[root@localhost ~]# ps -p 3639

>옵션종류

-p : 프로세서 아이디

-e : 현재 실행중인 모든 프로세서

-f : 실제 유저명, 개시시간

-l : 프로세서의 상태, 우선도 등과 같은 상세한 정보 표시 

 

예제1. 현재 리눅스 시스템에 떠있는 모든 프로세서들을 다 출력하시오.

[root@localhost ~]# ps -ef

 

예제2. 현재 리눅스 시스템에 있는 oracle 유저들에 대한 프로세서들만 출력하시오.

[root@localhost ~]# ps -ef | grep oracle

 

예제3. 다른 putty창을 열고 vi편집기를 열고서 다음과 같이 작성하시오.

다른 putty창으로 들어가 다음의 명령어를 실행해 확인하시오.

[root@localhost ~]# ps -ef | grep oracle

vi편집기 실행을 확인할 수 있습니다.

 

vi편집기 실행을 kill 시키시오

[root@localhost ~]# kill 4181

vi편집기 창으로 가보면 비정상 종료된 것을 확인할 수 있음.

 

 

예제4. 보통 현업에서 마리아 디비(mySQL)에 접속해서 악성sql을 수행하는 경우가 많음. 그래서 악성sql을 수행하고 있는 유저를 찾아서 kill 시켜야하는 경우가 종종 있음.

이 작업을 테스트 하겠습니다.

 

1. 마리아 디비 root유저로 접속해 아래의 악성 SQL을 수행합니다.

MariaDB [orcl]> select count(*)
    -> from emp a, emp b, emp c, emp d, emp e, emp f, emp g, emp h, emp i;

>top을 쳐서 확인해보면 cpu차지가 상당함.

 

2. 다른 putty창에서 top명령어로 cpu를 과도하게 수행하고 있는 프로세서를 찾고 kill 시킵니다.

[root@localhost ~]# kill 4386

 

3. 악성 SQL을 수행하고 있는 마리아 디비쪽 프로세서가 다음과 같이 kill된 것을 확인할 수 있습니다.

 

 

jobs 명령어

1. running : 실행중

2. stopped : 일시중단중

3. Done : 종료

4. terminated : 강제종료됨

 

예제1. putty 창에서 vi편집기를 열고 다음과 같이 작성하시오.

[root@localhost ~]# vim hhh.txt

select ename, sal, job, deptno
 from emp
 where
 
 esc키를 누르고 ctrl+z를 눌러 작업 취소
 
 [1]+  Stopped                 vim hhh.txt

[1] : job 번호

+ : 현재 진행중이었던 job

Stopped : 일시중단중

vim hhh.txt

 

동작중인 작업의 상태를 확인하는 명령어 : jobs

[root@localhost ~]# jobs
[1]+  Stopped                 vim hhh.txt

 

현재 진행중이었던 job으로 접속하는 명령어 : fg

[root@localhost ~]# fg
vim hhh.txt
[root@localhost ~]# jobs

 

 

34 리눅스의 쉘 스크립트 작성법

"내가 하고 있는 업무를 자동화 하고 싶을 때 사용하는 기술"

 

자동화에 관한 대표적인 리눅스 명령어 : case문

 

당장 자동화 하고싶은 명령어?

1. mariaDB를 시작시키는 명령어

2. mariaDB에 root유저로 접속하는 명령어

3. mariaDB에 scott유저로 접속하는 명령어

 

예제1. 아래의 case문을 일단 윈도우 메모장에서 작성하시오.

echo "마리아 디비를 시작시키려면 1번을 누르세요"

echo -n "번호를 입력하세요"
read choice
case $choice in
    1) 
        systemctl start mariadb
        netstat -anp | grep 3306;;
esac

위에서 작성한 코드를 전부 복사해 vi a.sh를 열고 붙여 넣으시오. 실행은 sh a.sh입니다.

[root@localhost ~]# vi a.sh
[root@localhost ~]# sh a.sh
마리아 디비를 시작시키려면 1번을 누르세요
번호를 입력하세요1
tcp6       0      0 :::3306                 :::*                    LISTEN      2225/mysqld
[root@localhost ~]#

 

 

예제2. mariaDB에 root유저로 접속하게 하는 다음 메시지 2번을 a.sh에 추가시키시오.

echo "1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기 "

echo -n "번호를 입력하세요"
read choice
case $choice in
    1) 
        systemctl start mariadb
        netstat -anp | grep 3306;;
    2) 
        mysql -u root -p;;
esac

a.sh를 실행시켜 root유저로 접속하세요.

[root@localhost ~]# vi a.sh
[root@localhost ~]# sh a.sh
1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
번호를 입력하세요2
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.4.24-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

 

 

예제3. scott유저로 접속하기를 a.sh 3번에 추가시키시오.

echo "1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
3. mariaDB scott유저로 접속하기 "

echo -n "번호를 입력하세요"
read choice
case $choice in
    1) 
        systemctl start mariadb
        netstat -anp | grep 3306;;
    2) 
        mysql -u root -p;;
    3) 
        mysql -h 192.168.122.1 -u scott -p;;
esac

a.sh를 실행시켜 scott유저로 접속

[root@localhost ~]# vi a.sh
[root@localhost ~]# sh a.sh
1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
3. mariaDB scott유저로 접속하기
번호를 입력하세요3
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.4.24-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

 

 

문제199. (점심시간 문제) 주피터 노트북 실행하는 자동화 스크립트 4번에 추가시키시오.

echo "1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
3. mariaDB scott유저로 접속하기
4. jupyter notebook 실행하기 "

echo -n "번호를 입력하세요"
read choice
case $choice in
    1) 
        systemctl start mariadb
        netstat -anp | grep 3306;;
    2) 
        systemctl start mariadb
        mysql -u root -p;;
    3) 
        systemctl start mariadb
        mysql -h 192.168.122.1 -u scott -p;;
    4) 
        su - oracle -c "conda activate py389; export  DISPLAY=172.30.1.38:0.0; jupyter notebook";;

esac

주피터 노트북 실행하기

[root@localhost ~]# vi a.sh
[root@localhost ~]# sh a.sh
1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
3. mariaDB scott유저로 접속하기
4. jupyter notebook 실행하기
번호를 입력하세요4

 

 

문제200. root유저에서 find 명령어를 이용해 emp.csv가 있는지 조회하시오. 리눅스 시스템 전체에서 조회되게 하시오

[root@localhost ~]# find / -name emp.csv
/root/emp.csv
/home/oracle/emp.csv
/media/sf_share2/emp.csv

/ :  이 위치를 시작으로 다 찾아라~~ 최상위 부터 찾는 중

-name 파일이름

 

만약 특정 디렉토리 아래에 있는 파일을 찾고 싶으면 파일명을 적어주면 됨.

[root@localhost ~]# find /root -name emp.csv

[root@localhost ~]# find /home/oracle -name emp.csv
/home/oracle/emp.csv

 

 

문제201. 특정 파일을 찾는 쉘 스크립트를 다음와 같이 작성하시오.

echo -n '검색할 파일명을 입력하세요 ~'
read file_name

echo -n '검색을 시작할 디렉토리명을 입력하세요 ~'
read file_loc
find $file_loc -name $file_name

vi 편집기의 위에 내용을 넣고 쉘을 실행하면 됨.

[root@localhost ~]# vi file_find.sh
[root@localhost ~]# sh file_find.sh
검색할 파일명을 입력하세요 ~emp.csv
검색을 시작할 디렉토리명을 입력하세요 ~/root
/root/emp.csv

 

 

문제202. 위에서 생성한 file_find.sh를 실행하는 문장을 a.sh에 5번에 넣으시오.

echo "1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
3. mariaDB scott유저로 접속하기
4. jupyter notebook 실행하기
5. 파일 검색하기 "

echo -n "번호를 입력하세요"
read choice
case $choice in
    1) 
        systemctl start mariadb
        netstat -anp | grep 3306;;
    2) 
        systemctl start mariadb
        mysql -u root -p;;
    3) 
        systemctl start mariadb
        mysql -h 192.168.122.1 -u scott -p;;
    4) 
        su - oracle -c "conda activate py389; export  DISPLAY=172.30.1.38:0.0; jupyter notebook";;
    5) 
        sh /root/file_find.sh;;

esac

a.sh 스크립트를 수정하여 실행하였음.

[root@localhost ~]# vi a.sh
[root@localhost ~]# sh a.sh
1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
3. mariaDB scott유저로 접속하기
4. jupyter notebook 실행하기
5. 파일 검색하기
번호를 입력하세요5
검색할 파일명을 입력하세요emp.csv
검색을 시작할 디렉토리명을 입력하세요/root
/root/emp.csv
[root@localhost ~]#

 

 

문제203. 자동화 스크립트 a.sh 6번에 종료하기를 추가하시오.

echo "1. mariaDB 시작시키기
2. mariaDB root유저로 접속하기
3. mariaDB scott유저로 접속하기
4. jupyter notebook 실행하기
5. 파일 검색하기
6. 종료하기 "

echo -n "번호를 입력하세요"
read choice
case $choice in
    1) 
        systemctl start mariadb
        netstat -anp | grep 3306;;
    2) 
        systemctl start mariadb
        mysql -u root -p;;
    3) 
        systemctl start mariadb
        mysql -h 192.168.122.1 -u scott -p;;
    4) 
        su - oracle -c "conda activate py389; export  DISPLAY=172.30.1.38:0.0; jupyter notebook";;
    5) 
        sh /root/file_find.sh;;
    6) 
        exit;;

esac

 

 

ㅇ쉘(shell)이란 무엇인가?

shell이란 운영체제에서 제공하는 명령을 실행하는 프로그램

 

 

ㅇ쉘(shell)스크립트란?

인터프리터(통역사) 역할을 하는 것으로 시스템에서 지원하는 명령어들의 집합을 묶어서 프로그램화한 것

 

 

ㅇ쉘(shell)의 종류

1. Boune shell

2. C shell

3. Korn shell

4. bash shell : 가장 많이 사용하는 쉘

 

우리가 지금 작성하고 있는 shell이 bash쉘 입니다.

 

쉘스크립트 작성시 맨 위에 "지금부터 작성하는 shell 스크립트 문법은 bash shell입니다" 라고 명시하고 프로그래밍을 합니다.

#!/bin/bash  쉘 중에서 bash쉘 쓰겠다는 뜻. 주석으로 달아서 쉘 종류를 공유하는 것. 안써도 코드 실행하는데는 문제 없음.

 

 

ㅇ 쉘스크립트 프로그래밍이란?

1. c언어와 유사한 프로그래밍

2. 변수, 반복문(loop문), 제어문(if문) 사용가능

3. 별도로 컴파일 하지 않고 텍스트 파일 형태로 바로 실행이 가능함. (컴파일 : 사람이 알아볼 수 있는 언어를 기계어로 바꾸는 것)

4. vi편집기로 작성 가능

5. 리눅스의 많은 부분이 쉘 스크립트로 작성되어져 있음

 

 

ㅇ 변수 사용법

1. 리눅스의 모든 변수는 문자열(string)으로 취급됩니다.

2. 변수 이름은 대소문자를 구분합니다.

3. 변수에 값을 대입할때는 '='좌우에 공백이 없어야합니다.

4. 변수에 들어간 문자를 출력하려면 변수 앞에 $를 붙이고 echo 명령어로 출력하면 됩니다.

# myvar="hi~"
# echo $myvar

 

 

ㅇ 변수의 숫자 계산하는 방법

1. 변수에 대입한 값은 모두 문자열로 취급 됩니다.

2. 변수에 들어있는 값을 숫자로 사칙연산 하려면 expr을 사용해야 합니다.

3. 수식에 괄호 또는 곱하기(*)를 사용하려면 그 앞에 반드시 역슬래쉬(\)를 붙여야 합니다.

[root@localhost ~]# num1=100
[root@localhost ~]# num2=200
[root@localhost ~]# echo $num1
100
[root@localhost ~]# echo $num2
200
[root@localhost ~]# echo $num1 + $num2
100 + 200
[root@localhost ~]# expr $num1 + $num2
300

 

문제204. num1과 num2의 곱을 구하시오.

[root@localhost ~]# expr $num1 \* $num2
20000

 

문제205. 아래의 계산식을 구현하시오.

($num2 + 200) * $num1

[root@localhost ~]# expr \( $num2 + 200 \) \* $num1
40000

> 괄호 앞 뒤로 띄어쓰기 잘 해야함

 

 

ㅇ파라미터 변수 사용법

1. 파라미터 변수는 $0, $1, $2, ...의 형태를 가집니다.

2. 전체 파라미터는 $*로 표현합니다.

[root@localhost ~]# vi add.sh

num1=$1
num2=$2
num3=`expr $num1 + $num2`
echo "$num1과 $num2를 더하면 $num3 입니다."

[root@localhost ~]# sh add.sh 24 18
24과 18를 더하면 42 입니다.

>역따옴표를 써야 역따옴표 안의 실행문이 실행되어서 num3 변수에 할당됨

변수=`리눅스 명령어`

>리눅스 명령어에 의해서 수행된 결과가 변수에 입력되어야 한다면 역따옴표를 사용해야 합니다.

>sh add.sh 하고 나서 변수 2개 입력해주면 num1, num2로 값이 부여됨.

 

 

문제206. 아래의 두 수를 곱한 결과가 출력되는 쉘 스크립트를 작성하시오.

[root@localhost ~]# vi two_number.sh

num1=$1
num2=$2
num3=`expr $num1 \* $num2`
echo "$num1와 $num2를 곱하면 $num3 입니다."

[root@localhost ~]# sh two_number.sh 12 54
12와 54를 곱하면 648 입니다.

 

대입연산자(=)는 양쪽에 공백없이 딱 붙여서 작성하고 다른 명령어들은 한칸 띄어쓰기를 해줘야함.

 

 

 

35 리눅스에서 if 문 사용하기

 

ㅇ문자열 비교

1. "문자열1"=="문자열2" : 두 문자열이 같으면 true

2. "문자열1"!="문자열2" : 두 문자열이 같지 않으면 true

 

ㅇ숫자열 비교

1. 숫자1 -eq 숫자2 : 두 숫자가 같으면 true(=)

2. 숫자1 -ne 숫자2 : 두 숫자가 같지 않으면 true(!=)

3. 숫자1 -gt 숫자2 : 숫자1이 숫자2보다 크다면 true(>)

4. 숫자1 -ge 숫자2 : 숫자1이 숫자2보다 크거나 같다면 true(>=)

5. 숫자1 -lt 숫자2 : 숫자1이 숫자2보다 작으면 true(<)

6. 숫자1 -le 숫자2 : 숫자1이 숫자2보다 작거나 같으면 true(<=)

7. !숫자1 : 숫자1이 아니라면 true (not)

 

예제1.

[root@localhost ~]# vi if1.sh

if [ 100 -eq 200 ]; then
    echo "100과 200은 같습니다."
else
    echo "100과 200은 같지 않습니다."
fi

[root@localhost ~]# sh if1.sh
100과 200은 같지 않습니다.

 

문제207. 위의 스크립트에 파라미터 변수를 이용해서 아래와 같이 실행될 수 있게 하시오.

[root@localhost ~]# vi if1.sh

if [ $1 -eq $2 ]; then
    echo "$1과 $2은 같습니다."
else
    echo "$1과 $2은 같지 않습니다."
fi


[root@localhost ~]# sh if1.sh 100 200
100과 200은 같지 않습니다.
[root@localhost ~]# sh if1.sh 100 100
100과 100은 같습니다.

 

 

문제208. 이번에는 아래와 같이 실행되게 if1.sh의 코드를 수정하시오.

[root@localhost ~]# vi if1.sh

if [ $1 -lt $2 ]; then
    echo "$1은 $2보다 작습니다."
elif [ $1 -gt $2 ]; then
    echo "$1은 $2보다 큽니다."
else
    echo "$1과 $2은 같습니다."
fi

[root@localhost ~]# sh if1.sh 100 200
100은 200보다 작습니다.
[root@localhost ~]# sh if1.sh 200 100
200은 100보다 큽니다.
[root@localhost ~]# sh if1.sh 100 100
100과 100은 같습니다.

 


36 리눅스의 논리연산자

1. and -> && 또는 -a

2. or -> || 또는 -o

3. not -> !

 

예제. 

 if [ $sal -lt 2000 ] && [ $job=="SALESMAN" ]; then
 
 # 또는
 
 if [ $sal -lt 2000 -a $job=="SALESMAN" ]; then

 

 

 

문제209. emp.txt에서 scott의 월급을 출력하시오.(awk 이용)

[root@localhost ~]# awk '$2=="SCOTT"' emp.txt
7788     SCOTT     ANALYST     7566     1982-12-22     3000     0     20

 

 

문제210. 위의 스크립트에 파라미터 변수를 사용해서 아래와 같이 실행되게 하는 쉘스크립트를 작성하시오.

[root@localhost ~]# vi find_sal.sh

awk -F ',' -v name=$1 '$2==toupper(name) {print $6}' emp.csv

[root@localhost ~]# sh find_sal.sh scott
3000

 

 

문제211. 위의 스크립트를 이용해서 아래와 같이 실행되게 코드를 수정하시오.

#sh find_job.sh allen

SALESMAN

[root@localhost ~]# vi find_job.sh

awk -F ',' -v name=$1 '$2==toupper(name) {print $3}' emp.csv

[root@localhost ~]# sh find_job.sh allen
SALESMAN

 

 

문제212. 위의 스크립트를 수정해서 아래와 같이 실행되게 코드를 수정하시오.

#sh find_job.sh allen

allen의 직업은 SALESMAN입니다.

[root@localhost ~]# vi find_job.sh

job=`awk -F ',' -v name=$1 '$2==toupper(name) {print $3}' emp.csv`

echo "$1의 직업은 $job입니다."

[root@localhost ~]# sh find_job.sh allen
allen의 직업은 SALESMAN입니다.

 

 

데이터 엔지니어에게 쉘 스크립트가 유용하게 사용되는 경우?

1. 데이터 전처리를 효율적으로 쉽게 하기 위해서

2. 분석하기 원하는 데이터를 추출하기 편하도록 하기 위해서

 

문제213. 부서번호가 20번인 사원들의 데이터를 출력하시오.(모든 행 출력)

[root@localhost ~]# awk -F ',' '$8==20' emp.csv
7566,JONES,MANAGER,7839,1981-04-01,2975,\N,20
7902,FORD,ANALYST,7566,1981-12-11,3000,\N,20
7369,SMITH,CLERK,7902,1980-12-09,800,\N,20
7788,SCOTT,ANALYST,7566,1982-12-22,3000,\N,20
7876,ADAMS,CLERK,7788,1983-01-15,1100,\N,20

 

 

문제214. 위에서 출력된 결과를 20.csv로 생성하시오.

[root@localhost ~]# awk -F ',' '$8==20' emp.csv >> 20.csv

 

문제215. 위의 스크립트를 이용해서 다음과 같이 쉘 스크립트를 실행하면 해당 부서번호에 해당하는 데이터만 생성되게 하시오.

awk -F ',' -v num=$1 '$8==num {print $0}' emp.csv >> $1.csv
ls -l $1.csv

# 또는

echo -n "생성하고 싶은 데이터의 부서번호를 입력하세요 ~ "
read  deptno
awk -F ','  -v num=$deptno '$8==num {print $0}'  emp.csv >> $deptno.csv
ls -l  $deptno.csv

 

 

37 리눅스에서 loop문 사용범

for 변수 in 값의 범위
do
    반복할 문장
done
root@localhost ~]# vi for1.sh

for i in {1..10}
do
    echo $i
done

[root@localhost ~]# sh for1.sh
1
2
3
4
5
6
7
8
9
10

 

 

문제216. emp.csv를 복사해서 emp1.csv ~ emp100.csv로 생성하는 쉘 스크립트를 작성하시오.

[root@localhost ~]# vi cp_emp.sh

for i in {1..100}
do
   cp emp.csv emp$i.csv
done

[root@localhost ~]# sh cp_emp.sh

 

 

문제217. 지금 복사한 emp1.csv ~ emp100.csv의 이름을 employee1.csv ~ employee100.csv로 변경하시오.

[root@localhost ~]# vi mv_emp.sh

for i in {1..100}
do
   mv emp$i.csv employee$i.csv
done

[root@localhost ~]# sh mv_emp.sh

 

 

문제218. employee1.csv ~ employee100.csv 파일중에 하나를 랜덤으로 골라서 파일을 연 후에 숫자 3000을 3900으로 변경하시오.

[root@localhost ~]# vi employee25.csv

:%s/3000/3900/g

 

 

문제219. emp.csv와 employee25.csv 파일의 차이가 있는지 확인하시오.

[root@localhost ~]# diff --brief emp.csv employee25.csv
Files emp.csv and employee25.csv differ

차이가 있으면 출력되고 차이가 없으면 출력되지 않습니다.

 

 

문제220. (오늘의 마지막 문제) for loop문을 이용해서 employee1.csv ~ employee100.csv 중에 emp.csv와 차이가 있는 파일이 무엇인지 한번에 알아내시오.

[root@localhost ~]# vi diff_emp.sh

for i in {1..100}
do
   diff --brief emp.csv employee$i.csv
done

[root@localhost ~]# sh diff_emp.sh

 

반응형