**뛰어쓰기로도 error나니 주의하기!!
Tip) 터미널에서 에디터로 sh파일을 열면 터미널 사용이 불가능하므로
gedit 파일명.sh & 로 백그라운드로 열어 Ctrl+S로 저장하고 터미널에서 결과 바로 출력해보기.
(gedit이 행번호도 나와서 오류확인에도 편리함.)
코드1)
if ~else문
#!/bin/sh
num1=100
num2=$num1+200
#위와 같이 입력시 계산이 아니라 문자열이 더해진것으로 인식하므로 100+200 출력
echo $num2
num3=`expr $num1 + 200`
echo "$num3"
num4=`expr \( $num1 + $num3 \) / 2 \* 3 `
#()괄호와 *곱기호 사용시 앞에 \(역슬러쉬)를 붙여야한다.
echo $num4
echo ===============================
num5=`expr \( $num1 + 100 \) / 2`
if [ num1=100 ]
then echo helloworld
else error
fi
exit 0
1. 쉘 파일은 확장자명을 *.sh로 끝내는게 일반적이다.
2. 스크립트 파일 첫 줄은 #!/bin/sh
3. 변수는 대소문자를 구분한다.
4. 변수는 값을 등호(=)를 통해 대입시키는 방식으로 간단하게 생성가능하며 자료형따로 X
5. 변수 사용시 $변수명
6. 값을 대입받는 변수는 $ 붙이면 안된다. (에러)
7. 숫자 계산을 해야될경우 `(역따움표)expr (계산)`(역따움표) 구조
8. 7번과 같이 사용하여 계산할때 괄호()나 곱*계산시엔 각각 \를 붙여 줘야함 ex. \( , \) , \*
9. 변수명='expr 까지는 붙여쓰고 뛰어쓰기 필요.
10. 각 연산부호 앞뒤로도 뛰어쓰기를 해줘야함.(뛰어쓰기 없을경우 에러발생)
11. [ 과 ] 도 앞뒤 뛰어쓰기 필수
12. if 로 시작 fi로 끝
13. exit 0는 정상종료의미 (exit 1은 error상태로 종료)(exit와 숫자사이에 뛰어쓰기 필수)
코드2)
case~in문
#!/bin/sh
case "$1" in
a)
echo "enter a";;
b)
echo "enter b";;
c)
echo "enterc";;
*)
echo "???";;
esac
echo ===========
echo yes or no?
read answer
case $answer in
yes|y|Y|Yes|YES)
echo yes입력함;;
[nN]*)
echo no입력함;;
*)
echo ??yes or no plz;;
esac
exit 0
1. $1, $2, $3 은 parameter(인자)(매개변수)로 sh형태의 쉘 스크립트 파일 실행시 값을 같이 넣어줘야 한다.
ex)sh caseTest.sh a b c ($1: caseTest.sh , $2: a , $3: b , $4: c)
2. case ~ in 문의 경우 각 케이스에 대한 수행이 끝났다는 의미로 마지막 부분에 ;(세미콜론)을 2개씩
3. case가 끝났다는 의미로 esac(case거꾸로) 적어주기
4. read 변수명 의 경우에는 사용자 입력을 기다렸다 입력값을 변수명에 넣어줌
5. case 나눌때 |(파이프라인)으로 or연산 가능
6. [Nn]*) 의 경우는 N또는n으로 시작하는 아무 단어를 의미한다. ex)no, Nooooo,Nasdg,nvvvv등등
7. *)는 위 케이스 외의 나머지 경우들.(C의 defaults문과 동일)
코드3)
for~in문(1)
#!/bin/sh
hap=0
for i in `seq 1 10`
do
hap=`expr $hap + $i `
done
echo "합은 $hap 입니다."
exit 0
1. for 변수명 in 값1 값2 값3 ...일 경우 값1부터 차례대로 대입
2-1. `(역따움표)seq 시작값 끝값`으로 간단하게 표현 가능.
2-2. `seq 시작값 증가값 끝값`도 가능
3. for ((i=0;i<=10;i++))으로 c와 비슷하게도 가능하다고 하는데 현재 버전이 낮아서인지 실행안됨
4. for i in {1..10} 1부터10까지 차례대로, 또는 for i in {1..10..2} 1부터 10까지 2씩 증가하며..도 3번과 마찬가지로 실행X
5. "(겹따움표)안에 쓰거나 그냥 쓰면 변수 인식가능
6. '(홀따움표)안에 쓰거나 앞에 \를 붙이면 문자로 취급함.
코드4)
for~in문(2)
#!/bin/sh
for fname in $(ls *.sh)
do
echo "========$fname========"
head -3 $fname
done
exit 0
1. fname변수에 ls *.sh의 결과 값을 차례대로 넣는다.
코드5)
while문(1)
#!/bin/sh
hap=0
i=1
while [ $i -le 10 ]
do
hap=`expr $hap + $i`
i=`expr $i + 1`
done
echo "1부터10까지의 합$hap"
exit 0
1. []앞뒤로 뛰어쓰기
2. 변수로 연산하기전에 값을 넣어 초기화(hap=0, i=1)하지 않으면 에러 발생.
3. -le는 less either로 적거나 같다를 의미
4. 변수명=`expr까지는 붙여쓰기 이후 뛰어쓰기. 연산부호 앞뒤로 꼭 뛰어줘야함.
코드6)
while문(2)
#!/bin/sh
echo 비밀번호를 입력하세요.
read pwd
while [ $pwd != 1234 ]
do
echo 틀렸습니다. 다시입력하세요
read pwd
done
echo 통과!
exit 0
1. 1234부분을 1234, '1234', "1234", \1234 네가지 중 하나로 쓰면 1234설정됨.
단, \1234의 경우 \1234와 1234 모두 맞게 인식.(\를 2개 입력시 틀렸다고 나오는걸 봐서는 \를 인식 못하는것은X)
2. []앞뒤로는 뛰어쓰기 해야한다.
코드7)
shift
#!/bin/sh
myfunc(){
str="ooooo"
while [ "$1" != "" ]; do
str="$str $1"
shift 2
done
echo $str
}
myfunc aa bb cc ddd eeee fff gggg hhhhh ii jjjj
exit 0
1-1. shift만 쓸경우 인자(parameter)값을 1개씩 앞당긴다.
1-2. 위 코드의 경우에는 shift 2를 썼으므로 2개씩 앞당겨진다.
2-1. 처음 파라미터(parameter)에서 $0값은 스크립트파일명.sh이다.
2-1. 또한 $1값=aa $2값=bb $3값은=ddd ... (이하생략) ...
3. 파일 실행시 ooooo aa cc eeee gggg ii 출력됨.
*parameter=인자값=매개변수
'리눅스' 카테고리의 다른 글
Unable to init server: 연결할 수 없습니다: 연결이 거부됨 (0) | 2021.05.17 |
---|---|
리눅스 쉘 스크립트 파일 실행방법 (0) | 2021.05.17 |
리눅스 링크 (하드 링크 , 심볼릭 링크) (0) | 2021.05.02 |
리눅스 마운트(mount) - cd/dvd, usb 연결 (0) | 2021.05.02 |
리눅스 에디터 gedit, nano, vi (0) | 2021.05.02 |