dukDukz
[Linux] 명령어 사용 연습 + 파일로 빼기 본문
# 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 명령어를 등록해서 쉘스크립트를 실행한것이다.
'웹 개발 > Linux' 카테고리의 다른 글
[Linux] 계정 user 생성 (0) | 2021.08.31 |
---|---|
[Linux] 조건문(if) / 매개변수 / for문 / find (0) | 2021.08.31 |
[Linux] IO 입출력 (0) | 2021.08.30 |
[Linux] 쉘 스크립트 환경변수 설정 (0) | 2021.08.30 |
[Linux] 셸 스크립트 / zsh로 변경 / 셸 커스터마이징 / alias (0) | 2021.08.30 |