티스토리 뷰
LINUX
[18] 리눅스 - 변수(환경변수, 지역변수, read, declare), 수식(연산자), 조건문, 반복문, 함수, 디버깅, shift
혀내 2022. 6. 27. 16:19반응형
변수
1. 단순 변수
$ 이름=단어
$ country=korea city=seoul
$ address="서울시 용산구 청파동"
$ echo $city
seoul
2. 리스트 변수
$ 이름=(단어리스트)
$ cities=(서울 부산 목포)
# 새로운 값 추가 - 두 가지 방법
$ cities = (${cities[*]} 제주)
$ cities[3] = 제주
- ${name[i]} : 리스트 변수 name의 i 번째 원소
- ${name[*]} / ${name[@]} : 리스트 변수 name의 모든 원소
- ${#name[*]} / ${#name[@]} : 리스트 변수 name의 원소 개수
표준입력 읽기 - read
read 명령어
표준 입력에서 한 줄을 읽어 단어들을 변수에 순서대로 저장한다.
(남은 단어들은 마지막 변수에 모두 저장한다.)
$ read x y
Merry Christmas! # 입력
$ echo x
Merry
$ read x
Merry Christmas! # 입력
$ echo x
Merry Christmas!
쉘 변수
환경변수
값이 자식 프로세스에게 상속된다.
(자식 프로세스가 환경변수 값을 부모로부터 복사한다.)
$ country=대한민국 city=서울
$ export country # export : 환경변수 설정 명령어
사전에 정의된 환경 변수
- $USER : 사용자 이름
- $TERM : 터미널 타입
- $PATH : 명령어를 검색할 디렉터리들 리스트
- $HOME : 홈 디렉터리
- $SHELL : 로그인 쉘 경로명
- $MAIL : 메일 박스 경로명
- $HOSTNAME : 호스트 이름
사전에 정의된 지역 변수
- $$ : 쉘의 프로세스 번호
- $0 : 쉘 스크립트 이름
- $1 ~ $9 : 명령줄 인수
- $* : 모든 명령줄 인수 리스트
- $# : 명령줄 인수의 개수
if 문
if 조건식
then
명령어리스트
else
명령어리스트
fi
조건식 쓰는 방법
1. test 식
$ if `test $# -eq 1`
2. [ 식 ]
$ if [$# -ne 1 ]
수식
조건식에서 아래의 연산자들을 활용할 수 있다.
산술 비교 연산자
-eq / -ne
|
같으면/다르면 참, 아니면 거짓.
|
-gt / -lt
|
크면/작으면 참, 아니면 거짓.
|
-ge / -le
|
크거나 같으면/작거나 같으면 참, 아니면 거짓.
|
문자열 비교 연산자
== / !=
|
같으면/다르면 참.
|
-n 문자열
|
null 이 아니면 참.
|
-z 문자열
|
null 이면 참.
|
파일 관련 연산
-a 파일 / -e 파일
|
해당 파일이 존재하면 참
|
-r 파일
|
사용자가 해당 파일을 읽을 수 있으면 참
|
-w 파일
|
사용자가 쓸 수 있으면 참
|
-x 파일
|
사용자가 실행할 수 있으면 참
|
-O 파일
|
사용자가 파일의 소유자이면 참
|
-z 파일
|
파일 크기가 0이면 참
|
-f 파일
|
일반 파일이면 참
|
-d 파일
|
디렉터리이면 참
|
부울 연산자
!
|
부정
|
&&
|
논리곱
|
||
|
논리합
|
산술 연산자
$ a=2+3
$ a=`expr 2 + 3`
→ 위의 두 구문에서 a 변수에는 5가 저장되지 않고 '2+3'이라는 문자열이 저장된다.
let 명령어를 이용해 변수에서 산술 처리가 가능하다.
$ let 변수=수식
$ let a=2*3
$ let a=$a+2
$ let a*=10
$ let b++
산술 수식은 if [ ] 가 아닌 if ((수식)) 을 사용한다.
변수 타입 선언 - declare
옵 션
-r 변수
|
읽기 전용 변수로 선언
|
-i 변수
|
정수형 변수로 선언
|
-a 변수
|
배열 변수로 선언
|
-f
|
스크립트에 정의된 모든 함수 출력
|
-f 함수이름
|
해당 함수 이름 출력
|
-x 변수
|
환경변수로 export
|
⇒ let 명령어를 사용할 필요가 사라진다.
조건문
1. if
if 조건식
then
명령어리스트
elif 조건식
then
명령어리스트
else
명령어리스트
fi
2. switch
case 단어 in
패턴1) 명령어리스트;;
패턴2) 명령어리스트;;
...
*) 명령어리스트;;
esac
반복문
1. for 구문
for 이름 in 단어리스트
do
명령어리스트
done
# 모든 명령줄을 인수로 처리하기
for file in $*
do
...
done
2. while 문
while 조건식
do
명령어리스트
done
※ 디렉터리 내 모든 파일을 처리하고 싶을 때
cd $dir # 해당 디렉터리로 이동
for file in *
do
...
done
※ 터미널에서도 while 문과 for 문을 실행할 수 있다.
$ for f in *
> do
> echo $f
> done
함수
# 함수 정의
함수이름()
{
명령어리스트
}
# 함수 호출
함수이름[매개변수]
→ 재귀 호출도 가능하다.
디버깅
스크립트에서 오류를 찾아내고 싶을 때 디버깅을 진행한다.
$ bash -vx 스크립트 [명령줄 인수]
$ bash -v menu.bash
shift
shift 명령어
명령줄 인수 [리스트 변수] 내 원소들을 하나씩 왼쪽으로 이동시킨다.
$ shift [리스트변수]
반응형
'LINUX' 카테고리의 다른 글
[20] 리눅스 - gcc 컴파일러, gdb 디버거 (0) | 2022.06.27 |
---|---|
[19] 리눅스 - vi 에디터 (0) | 2022.06.27 |
[17] 리눅스 - Bash 쉘 스크립트 작성 (bash shell, alias, history, 명령 재실행) (0) | 2022.06.27 |
[16] 리눅스 - awk란? (0) | 2022.06.21 |
[15] 리눅스 - 디스크(df, du) 및 tar 아카이브, 압축(gzip, compress), rpm (0) | 2022.06.21 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 사용자ID
- Baekjoon27219
- api문서
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- cron시스템
- 코테
- linuxgedit
- virtualbox
- cat
- atq
- E_FAIL
- 백준
- baekjoon
- Linux
- linux파일
- 백준27219
- awk프로그램
- OnActivityForResult
- Baekjoon27211
- 버추억박스에러
- linuxtouch
- GithubAPI
- 리눅스cron
- 백준27211
- 리눅스
- linuxawk
- 쇼미더코드
- 버추억박스오류
- GitHubAPIforJava
- whatis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함