dukDukz
[Linux] 조건문(if) / 매개변수 / for문 / find 본문
# 쉘 스크립트 IF 문
$ vi practice7.sh
if [ 1 조건 2 ]
then
code block
else
code block
fi # if 문 끝났을 때
조건 비교연산자
숫자일때와 문자열일때 다르다
1 === 1
"$A" == "$B"
어떤 비교가 가능한가?
1) 숫자비교
2) 해당 폴더에 디렉토리가 있는가. 있다면 파일을 만들어달라 -> 이런식으로.. 파일체크 디렉토리 체크
# if 문 옆에 비교연산자가 안들어가도 가능하다
if ls -l
then
echo "디렉토리 보기"
fi
이렇게 저장하고
$ sh practice7.sh
ls -l 이 실행되고 디렉토리 보기 까지 출력된다.
# 숫자 비교 / 셸 스크립트 비교 연산자
# 1 < 2
if [ 1 -gt 2 ]
then
echo "참"
else
echo "거짓"
fi
exit 0
비교 연산자 | 비교 연산자 |
-eq | < |
-ne | <= |
-gt | > |
-ge | >= |
-lt | ==, = |
-le | != |
외우기보다는 숫자를 이렇게 비교하는구나.. 손의 감각만 익혀놓기
연습은 practice8.sh 에서 했음
# [ if 문 ] 특정 폴더가 존재 하는지
scripts 폴더안에 log 라는 폴더가 있는가?
$ vi practice9.sh
if [ -d ~/scripts/log ]
then
echo "폴더가 존재"
else
echo "폴더가 없음"
fi
exit 0
-d 를 통해 알아 볼 수 있다.
폴더가 없음이 나왔다.
# [ if 문 ]특정 폴더가 없는 경우 만들어주기
- d 사용 : 디렉토리가 있는가?
if [ -d ~/scripts/log ]
then
echo "폴더가 존재합니다"
else
echo "폴더가 존재하지 않습니다"
echo "폴더 생성 중.."
mkdir ~/scripts/log
echo "폴더 생성 완료..!"
fi
exit 0
$ sh practice9.sh
mkdir /log
하면 그 명령어를 적은 해당 위치에 폴더가 생성된다.
원하는 위치가 따로 있을 경우에는 위에 처럼 정확한 위치를 적어주면 된다.
~ 는 home 이다.
이런게 node js 에서도 가능하긴 하지만
코드 길이나 이런면에서 효율적이지 않다!
# [ if 문 ] 파일 찾기 (검색)
-f 사용 : 파일이 있는가?
$ vi practice10.sh
if [ -f ~/scripts/log/test.sh ]
then
echo "파일이 있습니다"
else
echo "파일이 없습니다"
fi
exit 0
처음에는 파일이 없습니다. 가 나온다.
sh 파일에서는 vi 명령어가 실행이 안되기 때문에
/log 안에 들어가서 $ vi test.sh 만들어주고
다시 scripts 폴더로 돌아와서
$ sh practice10.sh
하면 파일이 있습니다가 나온다.
# [ if 문 ] sh 파일 안에서 특정 파일 생성하기
if [ -f ~/scripts/log/log.txt ]
then
echo "파일이 있습니다"
else
echo "파일이 없습니다"
echo "파일을 생성중입니다"
echo "hello" > log.txt # sh 를 실행한 폴더에 생기게 된다
echo "log.txt 파일을 생성했습니다"
fi
exit 0
echo 로 hello를 출력한것을 log.txt 로 만들겠다
혹은 파일 위치를 정해줄 수 있다,
echo "hello" > ~/scripts/log/log.txt
# 셸 스크립트 매개변수로 전달 받는 방법
vi practice11.sh 생성하고
1) 매개변수 1개
echo $1
매개변수로 전달 받는 방법 : $1
$ sh practice11.sh HELLO
하면 HELLO 가 출력됨
입력 받을 때 한 칸 띄우면 또 다른 매개변수로 인식하는데 그것도 받아 주고 싶다면?
2) 매개변수 2개
echo $1
echo $2
저장하고
$ sh practice11.sh HELLO WORLD
하면 HELLO WORLD 나옴
하나씩 추가하려면 숫자를 늘려주면 된다 $3 $4 이렇게
# [ for 문 ] 문자
$ vi practice12.sh
for v in $list
do
echo $v
done
어디부터 어디까지 어떤식으로..
do 이후부터 for 문 돌릴거고, 끝났다면 done 으로 표시해줘야함
$ sh practice12.sh
하면 문자 요소가 한글자씩 나온다
# [ for 문 ] 숫자 (배열..?)
array=(1 3 5 7 9)
for item in ${array[@]}
do
echo $item
done
-> 실행할때는 sh 가 아니라
bash practice12.sh 로 해야한다.
zsh practice12.sh
$ bash practice12.sh
# 혹은
$ zsh practice12.sh
이렇게 실행시켜야 한다.
# [ for 문 ] 기존 for 문
for((i=0; i<=10; i++))
do
echo $i
done
저장하고 나와서
$ bash practice12.sh
# 혹은
$ zsh practice12.sh
이렇게 실행시켜야 한다.
# [ find ] 검색
$ find ./text.txt
현재 위치에서 검색
# [ find ] 모든 디렉토리에서 찾는 명령어
$ find / -name node
전체 디렉토리에서 node 라는 애들을 다 찾는다.
[옵션]
1) type 이 file 인것만
find / -type f -name node
2) 특정 확장자
find / -type f -name "*.js"
3) 특정 위치에서
find ~/ -type f -name "*.js"
find ~/ -type f -name "server.js"
# [ find ] find 하면서 mv (찾으면서 파일 이동)
$ mv ./log.txt ./log/log.txt
이동시킴
$ mv ./log.txt ../log.txt
이동시킴
이거를 find 로 찾으면서 옮기는 방법이 있다.
어딨는지 모르는 파일을 옮길때 쓰는 방법이라고 할 수 있다.
find ~/ -type f -exec mv ./log.txt ./log/log.txt -name "log.txt"
- 지금 안됨
앞에 - 가 붙게 되면 순서는 상관없음 type을 먼저 쓰든 name 을 먼저 쓰든... 옵션순서는 상관 없음
'웹 개발 > Linux' 카테고리의 다른 글
[Linux] 계정 user 생성 (0) | 2021.08.31 |
---|---|
[Linux] 명령어 사용 연습 + 파일로 빼기 (0) | 2021.08.30 |
[Linux] IO 입출력 (0) | 2021.08.30 |
[Linux] 쉘 스크립트 환경변수 설정 (0) | 2021.08.30 |
[Linux] 셸 스크립트 / zsh로 변경 / 셸 커스터마이징 / alias (0) | 2021.08.30 |