Linux 학습 노트 셸 프로 그래 밍
컴 파일 언어:기계 언어,어 셈 블 리 언어 와 고급 언어
정적 언어:컴 파일 형 언어
강 한 유형:변 수 를 사용 하기 전에 미리 생명 을 가 져 야 하고 심지어 초기 화 해 야 합 니 다.
사전 컴 파일,사전 실행 가능 한 형식 으로 변환
C、C++、JAVA、C#
동적 언어:해석 형 언어,on the fly
약 한 유형:변수 사용 시 성명,심지어 유형 을 구분 하지 않 습 니 다.
해석 하면 서 실행 하 다
PHP、shell、python、perl
프로 세 스 지향:셸,C
대상 지향:JAVA,python,perl,C++
스 크 립 트:명령 의 쌓 기,실제 수요 에 따라 명령 프로 세 스 제어 메커니즘 원본 프로그램 과 결합
shebang:마수
#!/빈/bash:스 크 립 트 를 실행 할 셸 을 지정 합 니 다.
\#:주석 줄,실행 하지 않 음
스 크 립 트 가 실 행 될 때 키 셸 프로 세 스 를 시작 합 니 다.
명령 행 에서 시 작 된 스 크 립 트 는 현재 셸 환경 변 수 를 계승 합 니 다.
시스템 이 자동 으로 실행 하 는 스 크 립 트(비 명령 행 시작)는 필요 한 환경 변 수 를 스스로 정의 해 야 합 니 다.
프로 세 스 지향
제어 구조
순서 구조
선택 구조
순환 구조
선택 구조:
1.if 조건문
if [ expression ] ;then
statement1
...
elif 조건;then
statement1
...
...
fi
expression 의 정수 비교:
-eq:두 정수 가 같은 지 테스트 합 니 다.예 를 들 어$A-eq$B
-ne:not equal
-gt:greater than
-lt:less than
-ge:great than or equal
-le:less than or equal
expression 의 파일 테스트
-e FILE:파일 이 존재 하 는 지 테스트
-f FILE:파일 이 일반 파일 인지 테스트
-b FILE:파일 이 블록 장치 파일 인지 테스트
-c FILE:파일 이 문자 장치 파일 인지 테스트
-d FILE:지정 한 경로 가 디 렉 터 리 인지 테스트
-r FILE:현재 사용자 가 지정 한 파일 을 읽 을 수 있 는 권한 이 있 는 지 테스트 합 니 다.
-w FILE: 쓰다
-x FILE: 집행 하 다.
expression 의 문자 나 문자열 테스트:
==:동일 한 지,동일 한 지,거짓 이 아 닌 지 테스트
!=:기다 리 지 않 는 지,기다 리 지 않 는 것 이 진실 인지,기다 리 는 것 이 거짓 인지 시험 하 다.
-n string:지정 한 문자열 이 비어 있 는 지,비어 있 는 것 이 아 닌 것 이 진짜 인지,비어 있 는 것 이 가짜 인지 테스트 합 니 다.
-z string:지정 한 문자열 이 비어 있 지 않 은 지,비어 있 는 것 이 진짜 인지,비어 있 지 않 은 것 이 가짜 인지 테스트 합 니 다.
expression 의 논리 조합 테스트:
-a:관계,양쪽 이 진실 이 어야 진실 이 야<-->[exp 1]&&[exp 2]
-o:또는 관계,양쪽 이 가짜 여야 가짜<-->[exp 1]|[exp 2]
!:비관 계
예:if[$\#-gt 1-a$\#-le 3] <--> if [ $# -gt 1 ] && [$# -le 3 ]
if COMMAND ;then
statement1
...
else
statement2
...
fi
COMMAND 의 실행 상 태 를 판단 하여 코드 를 되 돌려 주 고 0 으로 정확하게 실행 하 는 것 을 나타 내 며 만족 조건 을 나타 내 고 COMMAND 명령 을 실행 하 며 1-255 로 잘못 실행 하 는 것 은 조건 을 만족 하지 않 음 을 나타 낸다.
2.case 구문
case SWITCH in
value1)
statement
...
;;
valule2)
statement
...
;;
*)
statement
...
;;
esac
SWITCH 에 서 는 보통 변수의 인용 입 니 다.
value 의 값 은 a-z A-Z 0-9[abc]-v|--verbose 등 형식 을 받 아들 일 수 있 습 니 다.
순환 구조:
1.for 순환 문
for 변수 in 목록;do
순환 체
done
목록 생 성 방법:
{1..100}
`seq 시작 수 스텝 길이 끝 수`
for(변수=초기 값;조건 판단 하기;변수 변화);do
statement1
...
done
2.while 순환 문:조건 을 만족 시 킨 후 내부 순환 문 구 를 실행 합 니 다.
while CONDITION;do
statement1
...
done
while :;do 무한 순환
statement1
...
done
while read LINE;do LINE 에서 한 줄 씩 읽 기
statement1
...
done < /path/to/file
3.until 순환 문:조건 을 만족 시 키 지 않 고 내부 순환 문 구 를 실행 합 니 다.
until CONDITION;do
statement1
...
done
function:구조 화 프로 그래 밍,독립 적 으로 실행 할 수 없고 호출 이 필요 할 때 실행 되 며 여러 번 호출 될 수 있 습 니 다.
함수 정의:
function FUNCNAME {
command
}
FUNCNAME() {
command
}
함수 에서 사용자 정의 실행 상태 반환 값:
return # (0-255)
변수 속성 설명
declare:인자 와 같 지 않 으 면 set 에 해당 합 니 다.
-i:정수 로 표시
-a:배열 로 표시
-x:export 에 해당 하 며 환경 변 수 를 정의 합 니 다.
셸 의 산술 연산
A=3
B=6
1.let 산술 연산 식
let C=$A+$B
2.$[산술 표현 식]
C=$[$A+$B]
3.$(산술 표현 식)
C=$(($A+$B))
4.expr 산술 표현 식,표현 식 의 각 조작 수 와 연산 자 사이 에 빈 칸 이 있어 야 하 며 명령 참조 도 사용 해 야 합 니 다.
C=^expr $A + $B`
명령 간 논리 관계:
논리 와:&&
첫 번 째 조건 이 가짜 일 때,두 번 째 조건 은 판단 할 필요 가 없다.
첫 번 째 조건 이 진실 일 때,두 번 째 조건 은 반드시 판단 해 야 한다.
논리 또는:||
첫 번 째 조건 이 진실 일 때,두 번 째 조건 은 판단 할 필요 가 없다.
첫 번 째 조건 이 가짜 일 때,두 번 째 조건 은 반드시 판단 해 야 한다.
예:[`wc-l/etc/inittab|cut-d''-f1'-gt 100]&echo"Large file."
스 크 립 트 실행 상태 반환 코드 정의
exit:스 크 립 트 종료
exit\#:스 크 립 트 실행 상태 반환 코드 를\#로 정의 합 니 다.
스 크 립 트 가 실행 상태 반환 코드 를 명확 하 게 정의 하지 않 으 면 마지막 으로 실 행 된 명령 의 실행 상태 반환 코드 는 스 크 립 트 의 실행 상태 반환 코드 입 니 다.
키보드 에서 읽 어 들 여 변수 에 값 을 부여 합 니 다.
read[OPTION]변수
-줄 바 꾸 지 않 음
-p"string":string 의 알림 정보 표시
-t\#:시간 초과 설정
예:read-p"사용자 이름 을 입력 하 십시오:"USERNAME
스 크 립 트 에 문법 오류 가 있 는 지 테스트 합 니 다.
bash-n 스 크 립 트
bash-x 스 크 립 트:한 단계 실행
\#와%의 특수 용법
${parameter\#*word}:왼쪽 에서 오른쪽으로 첫 번 째 word 오른쪽 문 자 를 가 져 옵 니 다.
${parameter\#\#*word}:왼쪽 에서 오른쪽으로 마지막 word 오른쪽 문 자 를 가 져 옵 니 다.
${parameter%word*}:오른쪽 에서 왼쪽으로 첫 번 째 word 왼쪽 문 자 를 가 져 옵 니 다.
${parameter%%word*}:오른쪽 에서 왼쪽으로 마지막 word 왼쪽 문 자 를 가 져 옵 니 다.
예:
FILE=/usr/local/src
${FILE#*/}: usr/local/src
${FILE##*/}: src
${FILE%/*}: /usr/local
${FILE%%/*}:
${\#VARNAME}:변수 에 있 는 문자 의 길 이 를 가 져 옵 니 다.
국부 변수
local VAR_NAME=
a=1
test() {
a=$[3+4]
}
test
for I in `seq $a 10`; do
echo $I
done
결 과 는 7,8,9,10.
a=1
test() {
local a=$[3+4]
}
test
for I in `seq $a 10`; do
echo $I
done
결 과 는 1,2,3,4,5,6,7,8,9,10.
시그 널
kill -SIGNAL PID
1:HUP
2:INT
9:KILL
15:TERM
스 크 립 트 에 서 는 신호 캡 처 를 실현 할 수 있 지만 9 와 15 는 캡 처 할 수 없습니다.
Ctrl+c 는 SIGINT 신 호 를 보 내 는 것 과 같 습 니 다.
trap 명령:bash 의 내장 명령,신 호 를 포착 하고 COMMAND 실행
trap'COMMAND'신호 목록(신호 간 빈 칸 으로 구분):신호 목록 의 신 호 를 포착 하면 COMMAND 명령 을 실행 합 니 다.
예:trap'echo'no quit..."INT
trap 응용 예
#!/bin/bash
#
CLEANUP(){
rm -rf /var/tmp/test
echo "rm success..."
}
trap 'CLEANUP;exit 5' INT
#trap 'rm -rf /var/test;echo "rm success...";exit 5' INT
mkdir -p /var/tmp/test
while true;do
touch /var/tmp/test/file-`date +%F-%H-%M-%S`
getopts:bash 스 크 립 트 의 옵션 과 인 자 를 가 져 옵 니 다.
형식:getopts optstrings 변수
getopts ":b:d:" OPT
echo $OPT # ,
echo $OPTARG #
getopts 의 특수 변수
OPTARG #옵션 매개 변수
OPTIND #옵션 포인터,정수 값,값 은 선택 한 옵션 의 위치+1 과 같 습 니 다.
getopts 응용 예
while getopts ":b:d:" SWITCH;do
case $SWITCH in
b) echo "The option is b"
echo $OPTARG;;
d) echo "The option is d"
echo $OPTARG;;
*) echo "Wrong option";;
esac
done
shift $[$OPTIND-1] #shift , $1
특수 기호의 응용
$\#스 크 립 트 에 전 달 된 매개 변수 개 수 를 표시 합 니 다.
$0 은 스 크 립 트 자체 의 이름 을 표시 합 니 다.
$1 은 이 셸 스 크 립 트 에 전 달 된 첫 번 째 인 자 를 표시 합 니 다.
$2 는 이 셸 스 크 립 트 에 전 달 된 두 번 째 인 자 를 표시 합 니 다.
$@스 크 립 트 에 전 달 된 모든 매개 변 수 를 표시 하 는 목록
$*는 스 크 립 트 에 전 달 된 모든 인 자 를 하나의 문자열 로 표시 합 니 다.위치 변수 와 달리 인 자 는 9 개 를 초과 할 수 있 습 니 다.
$$스 크 립 트 가 실행 중인 현재 프로 세 스 ID 번 호 를 표시 합 니 다
$?마지막 명령 의 종료 상 태 를 표시 합 니 다.0 은 오류 가 없 음 을 표시 하고 다른 것 은 오류 가 있 음 을 표시 합 니 다.
bash 에서 배열 의 응용
배열 설명
declare -a array_name
배열 할당 방법
array_name[#]=value 단일 아래 표 시 를 지정 하여 값 을 부여 합 니 다.
array_name=(value1 value2 value3...) 순서대로 아래 표 시 된 0 부터 값 을 부여 합 니 다.
array_name=([0]=value1 [2]=value2 [5]=value3...) 여러 개의 아래 표 시 를 지정 하여 값 을 부여 합 니 다.
인쇄 방법
echo ${array_name[#]}
예:INDEX=$[$RANDOM%7];echo ${aa[$INDEX]}
요소 문자 길이
echo ${#array_name}0 번 째 요소 의 문자 갯 수
echo ${#array_name[\#]}제\#개 요소 의 문자 갯 수
echo ${#array_name[*]}전체 배열 의 값 이 비어 있 지 않 은 요소 의 개수
echo ${#array_name[@]}전체 배열 의 값 이 비어 있 지 않 은 요소 의 개수
배열 응용 예
10 개의 무 작위 수 를 만들어 배열 에 저장 하고 배열 의 최대 수 를 찾 습 니 다.
#!/bin/bash
#
for I in {0..9};do
ARRAY[$I]=$RANDOM
echo -n "${ARRAY[$I]}"
sleep 1
done
echo
declare -i MAX=${ARRAY[0]}
for I in `seq 1 ${#ARRAY[*]}`; do
if [ $MAX -lt $ARRAY[$I] ];then
MAX=${ARRAY[i]}
fi
done
echo $MAX
배열 을 만 들 려 면 다음 과 같 아야 합 니 다.
1.배열 의 요소 개 수 는 1-39 이다.
2.배열 요 소 는 같 을 수 없습니다.
3.이 배열 의 각 요소 의 값 을 표시 합 니 다.
#!/bin/bash
#
read -p "The element numbers:" ElENUM
function COMELE {
for J in `seq 0 $[${#ARRAY[@]}-1]`;do
if [ $1 -eq ${ARRAY[$J]} ];then
return 1
fi
done
return 0
}
ARRAY[0]=$RANDOM
for I in `seq 1 $[$ELENUM-1]`;do
while true;do
ELEMENT=$RANDOM
COMELE $ELEMENT
if [ $? -eq 0];then
break
fi
done
ARRAY[$I]=$ELEMENT
done
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 언어 인 코딩 규범 (주석)규범 적 고려: 안전 한 각도, 성능 의 각도, 코드 의 가 독성 하나. 정식 을 시작 하 다 (1) 주석 1) 환수 2) 일반 주석 3) 스 크 립 트 의 머리 주석...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.