dukDukz

[Linux] 명령어 사용 연습 + 파일로 빼기 본문

웹 개발/Linux

[Linux] 명령어 사용 연습 + 파일로 빼기

헤일리_HJ 2021. 8. 30. 17:24

# scrips 라는 폴더 (경로생성)

$ cd ~
$ mkdir scrips
$ ls
$ cd scrips


# sh 파일 생성/수정/실행

$ vi 파일명.sh

작성하고

$ sh 파일명.sh

실행하기


# 리눅스에서 기본적으로 갖고 있는 달력출력


$ cal
$ date

 

 


# 이렇게 썼던 명령어를 한줄로 만들어볼거다

 

세미콜론의 개념을 ; 배워보자는것

 

js 를 할때는 ; 을 많이 안썼었는데

최근에는 함수형 어쩌구가 나오면서 세미콜론을 없애고 있는 추세이다.

$ cal; date; echo $PATH
이렇게 한줄에 쓸 수 있다는 얘기

 


# 결과값 파일에 저장 / head / tail

 

$ ps -ef | grep node > node.txt


꺽쇄 기준으로 왼쪽에 있는 애들을 오른쪽으로 내보낸다.
왼쪽에 있는 출력에 대한 결과를 node.txt 파일로 만들어서 보낸다.
그러면 node.txt 파일이 생성되었다. 들어가보면 node 에 대한 출력 값들이 들어가있다.

 

$ head -n 1 node.txt


하면 내용이 맨 위에거가 나온다

 

$ tail -n 1 node.txt


하면 맨 아래거가 나온다.

보통 tail 을 많이 쓴다, 
log 파일을 볼때 쓰이는 편..

 

$ ps -ef | grep node > node.txt
$ vi node.txt // 하면 두줄이 들어가 있는게 나온다.
$ head -n 1 node.txt //맨 위에 한줄 보이도록
$ tail -n 1 node.txt // 맨 아래 한줄 보이게
$ cat node.txt // 내용을 그대로 출력
$ cat node.txt | grep server.js // 내용 보이는데 그 안에서 server.js 검색

# practice1.sh

$ pwd
$ cd scrips

$ vi practice1.sh

echo 달력
cal
echo 날짜
date
echo 환경변수
echo $PATH
echo 목록보기
ls -al

exit 0

$ sh practice1.sh

실행시킬때는 sh로 실행시키면 된다.

 

한줄로 하겠다하면

echo 달력; cal; echo 날짜; date

 

로 바꿔주면 된다.

 


# practice2.sh

 

방금 했던거를 변수에 담아서 해보는걸로 해보자고

쉘 스크립트에서 주석은 # 이다.

code=cal
code2=10
code3=hello
code4=date

$code
echo $code2
echo $code3
$code4

exit 0


cal 과 date 는 이미 그 안에 echo 문이 포함이라서 굳이 안쓰고 변수 호출만 해주면 된다,
그리고 변수 호출때에는 앞에 $ 붙여줘야함

$ sh practice2.sh
실행

 


# practice3.sh

$ vi practice3.sh

code = hello world!

echo $code

exit 0

 

이렇게 하면 작동이 되지 않음..
변수에 넣을 때는 띄어쓰기는 인식하지 못함 = 앞 뒤로
그래서 code=hello world!
이렇게 해줘야함

practice3.sh: 1: world!: not found
그러면 이렇게 오류메시지가 나옴

즉 hello 까지는 code 에 들어갔지만 띄어쓰기가 되어있어서 오류가 난거임

world! 라는 것을 어떤 예약어로 생각한것. 그래서 먼저 예약어를 찾고 없으면  text로 출력해주는데 아무것도 선언이 안되어있으니까 오류가 났다.


그리고 마지막에 echo $code 해주고 다시 sh parctice3.sh 하면 잘 나옴

근데 꼭 띄어쓰기를 하고 싶다??
그러면 "hello world!" 처럼 문자라고 정확히 알려주는 수 밖에 없다. 따옴표를 넣어서

 

만약 code=cal 로 한다면 예약어로 인식할 것이다.
하지만 cal이라는 예약어가 없다면 텍스트로 인식
그리고 = 앞 뒤로 띄어쓰기 하면 변수 선언이 안된다.
변수가 아닌 그 자체만으로도 기능이 되는 녀석으로 인식이 된다.

 


# practice4.sh

 

# ps -ef | grep node

code=`ps -ef | grep node`
echo $code
exit 0

명령 텍스트 파이프라인

 

이렇게 작성해준다.
$ sh practice4.sh

 

cd ~/server 에서 node server.js & 로 돌려놓고 
cd ~/scrips 에서 sh practice4.sh 하면 서버가 돌아가고 있다는게 나온다.

 

 


# practice5.sh

숫자와 숫자를 더할때

val=5
val2=$val * 10

echo $val
echo $val2

exit 0

저장하고 실행시키면
$ sh practice5.sh
안나옴.. 
practice5.sh: 2: practice1.sh: not found
5
이런 오류가 뜸

 

얘가 인식을 못한거임 띄어쓰기때문에

 

그래서

val2=$val*10

 

이렇게 고쳐주고 실행하면

5
5*10

이렇게 나온다.

 

즉 쉘스크립트에서는 * 이 곱하기가 아니다.

 

val2=`expr $val \* 10`

 

이렇게 코드가 실행될 영역을 잡아준다.

 

expr : 연산을 하겠다.

expr 1 + 2 		# 3
echo 1 + 2 		# 1 + 2

 

이렇게 나온다.

 


# practice6.sh

ps -ef | grep node > node2.txt
head -n 1 node2.txt
# 한줄만 내보내는 것

 

저장하고
$ sh practice.sh

 

$ cd ~
$ vi .zshrc

alias nodeserver='sh ~/scrips/practice6.sh'

 

추가하고 저장하고 나와서
서버 껐다가 키고

 

cd ~/server 에서
node server.js &
하고 다시

 

cd ~ 
nodeserver 하면
hyejjun    344   300  1 12:28 tty1     00:00:00 node server.js
이렇게 됨

 

alias 명령어를 등록해서 쉘스크립트를 실행한것이다.