셸 프로 그래 밍 - 입문 편

16408 단어 shell
1. 셸 유형, 형식, 실행 방식, 구문 주석 셸 종류: Liux 의 Shell 종류 가 많 고 흔히 볼 수 있 는 것 은 Bourne Shell (/ usr / bin / sh 또는 / bin / sh), Bourne Again Shell (/ bin / bash), C Shell (/ usr / bin / csh), K Shell (/ usr / bin / ksh), Shell for Root (/ sbin / sh) 등 이 있다.셸 언어 에 따라 문법 이 다 르 기 때문에 교환 해서 사용 할 수 없습니다.모든 Shell 은 특색 이 있 습 니 다. 기본적으로 그 중 하 나 를 파악 하면 충분 합 니 다.본 논문 에서 우리 가 주목 하 는 중점 은 Bash, 즉 Bourne Again Shell 이다. 사용 하기 쉽 고 무료 이기 때문에 Bash 는 일상적인 업무 에서 널리 사용 된다.또한 Bash 는 대부분의 Linux 시스템 의 기본 셸 이기 도 하 다.일반적인 상황 에서 사람들 은 Bourne Shell 과 Bourne Again Shell 을 구분 하지 않 기 때문에 아래 의 문자 에서 우 리 는 \ #! / 를 볼 수 있다.bin / sh, 그것 도 \ #! / 로 바 꿀 수 있 습 니 다.bin/bash。 셸 형식: 일반 형식 은 다음 과 같 습 니 다.
#!/bin/bash
#comments
Your commands go here

첫 줄 의 기호 \ #!시스템 에 다음 경 로 를 알려 주 는 프로그램 은 이 스 크 립 트 파일 을 설명 하 는 셸 프로그램 입 니 다.첫 줄 에 이 말 이 없 으 면 스 크 립 트 파일 을 실행 할 때 오류 가 발생 합 니 다.다음 부분 은 메 인 프로그램 입 니 다. Shell 스 크 립 트 는 고급 언어 처럼 변수 할당 도 있 고 제어 문 도 있 습 니 다.첫 줄 을 제외 하고 \ # 로 시작 하 는 줄 은 이 줄 이 끝 날 때 까지 주석 줄 입 니 다.한 줄 이 완성 되 지 않 으 면 줄 끝 에 '를 붙 일 수 있 습 니 다. 이 기 호 는 다음 줄 이 이 길드 와 같은 줄 로 합 쳐 진 다 는 것 을 나타 냅 니 다.스 크 립 트 실행: 편집 이 완료 되 었 습 니 다. 스 크 립 트 를 filename. sh 로 저장 합 니 다. 파일 이름 접미사 sh 는 Bash 스 크 립 트 파일 임 을 표시 합 니 다.스 크 립 트 를 실행 하 는 방법 은 두 가지 가 있 습 니 다. ① 스 크 립 트 파일 의 실행 가능 한 권한 을 먼저 사용 한 다음. / filename. sh chmod + x filename. sh. / filename. sh ② 직접 bash filename. sh. filename 의 파일 시작 은 \ #! /빈 / bash, 시작 이 \ # 라면! /bin / sh 는 sh filename. sh 로 합 니 다.bash 와 sh 는 대부분 통용 되 지만 차이 가 있 을 수 있 습 니 다. bash 를 통일 적 으로 사용 하 는 것 을 권장 합 니 다. 다음은 전형 적 인 'hello World' 에 착안 하여 가장 간단 한 Shell 스 크 립 트 의 모습 을 살 펴 보 겠 습 니 다.
#!/bin/bash
#print hello world in the console window
a = "hello world"
echo $a

문장의 주석: 한 줄 주석: 시작 에 우물 번호 '\ #' 를 추가 하고 주석 이 여러 줄 이면 줄 의 시작 에 \ # 를 추가 합 니 다.사실 많은 사람들 이 모 릅 니 다. 셸 은 여러 줄 의 주석 을 지원 하 는 여러 줄 의 주석 입 니 다.
:<<BLOCK
......    
BLOCK

예:
#!/bin/bash
:<<BLOCK
author:michaelzeng
date:20160419
BLOCK
echo "hello world"

2. 판단 문 if 기본 문법:
if condition; then
command
else
command
fi

판단 조건 은 문자열 비교, 숫자 크기 비교 또는 파일 판단 등 문자열 비교 일 수 있 습 니 다.두 문자열 의 길이 가 같 지 않 은 지 판단 하기 - n: 문자열 의 길이 가 0 보다 큰 지, 0 보다 크 면 '예' - z: 문자열 의 길이 가 0 과 같 는 지, 같 으 면 '예' 정수 비교 문자: - eq: 같은 - ge: 같은 - le 보다 크 면 - ne 보다 작 습 니 다. - lt 와 같 지 않 습 니 다. 주의 보다 크 면 정수 만 비교 할 수 있 습 니 다. 만약 에 부동 소수점 이 라면,bc 명령 으로 처리 할 수 있 습 니 다. 방법 은 다음 과 같 습 니 다. bc 명령 은 크기 를 비교 할 수 있 습 니 다. 정확하게 1 을 되 돌려 주 고 오 류 는 0 으로 되 돌려 줍 니 다.
a=1.85;b=2.2
if [ $(echo "$a < $b"|bc) -eq 1 ];then
    echo "a < b"
else
    echo "a > b"
fi

논리 조작:!:반대로 논리 값 과 반대 되 는 논리 값 을 취한 다. -a: (and) 와 두 논리 값 은 '예' 이 고 반환 값 은 '예' 이 며 반대로 '아니오' 도 사용 할 수 있 습 니 다. & o: 또는 (or) 두 논리 값 중 하 나 는 '예' 이 고 반환 값 은 '예' 입 니 다.사용 가능 | | 그 중: - a 와 - o 는 주로 괄호 안에 사용 되 며, []; & &와 | | 이중 괄호 에 사용 되 며, [[] 아래 두 문장 은 등가 이다
a=1;b=2
[[ $a -eq 1 && $b -eq 2 ]] && echo ok 
[ $a -eq 2 -a $b -eq 2 ] && echo ok

단일 괄호 와 이중 괄호 의 차이 에 대하 여 후속 으로 다시 이야기 하 다.
파일 작업: 파일 테스트 표현 식 은 보통 파일 정 보 를 테스트 하기 위해 스 크 립 트 에서 파일 사랑 이 백업, 복사, 삭 제 를 적용 할 지 여 부 를 결정 합 니 다.자주 사용 하 는 파일 연산 자 는 다음 과 같 습 니 다. - d: 대상 이 존재 하고 디 렉 터 리 가 "예" - f: 대상 이 존재 하 며 파일 이 "예" - L: 대상 이 존재 하고 기호 연결 을 위해 "예" - r: 대상 이 존재 하고 읽 을 수 있 으 면 "예" - s: 대상 이 존재 하 며 길이 가 0 이 아니면 "예" - w: 대상 이 존재 하고 쓸 수 있 으 면 "예" 로 되 돌려 줍 니 다.- x: 대상 이 존재 하고 실행 가능 하면 "예" 로 되 돌려 줍 니 다.
3. 순환 구조 셸 에서 흔히 볼 수 있 는 순환 문 구 는 for 순환, while 순환, until 순환 for 순환 형식 1: 순환 반복
for $var in list;do
    commands
done

예: 어떤 디 렉 터 리 를 옮 겨 다 니 기
for file in `ls /home`;do echo $file;done

형식 2: 조건 순환
for (( cond1; cond2; cond3 ));do
    commands
done

예: for 순환 실현 구구 곱셈 표
#!/bin/bash
#          
#for a seq 9;do
#for a {1..9};do
for((a=1;a<10;a++));do
        for((b=1;b<=a;b++));do
                echo -ne "$a*$b=$((a*b))\t"
                if [[ $b -eq $a ]];then
                        echo
                fi
        done
done

수출 결과: 1 * 1 = 1 1 = 1 2 * 1 = 2 2 * 2 = 2 2 * 2 = 4 3 * 1 = 3 * 2 = 3 * 2 = 6 3 * 2 = 6 * 3 = 9 4 * 1 = 4 * 2 = 4 * 2 = 4 * 2 = 8 4 * 3 = 2 2 = 2 4 * 2 = 2 2 2 2 = 8 4 * 2 = 4 * 2 = 4 * 2 = 8 4 * 2 = 8 4 * 3 = 2 = 8 4 * 3 = 12 4 * 3 = 12 4 * 2 2 2 = 2 4 * 4 4 * 4 = 16 * 4 = 16 * 4 = 16 * 4 = 16 * 6 = 16 * 6 = 16 * 6 = 36 * 6 = 30 6 * 6 = 36 * 6 = 7 * 2 = 7 * 2 = 2 = 17 * 2 = 17 * 3 = 17 * 3 = 21 * 3 = 21 7 * 4 = 28 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 459 * 6 = 54 9 * 7 = 63 9 * 8 = 729 * 9 = 81
while 순환: 표현 식 이 성립 되 고 do 와 done 간 의 조작 을 반복 합 니 다. 표현 식 이 성립 되 지 않 을 때 까지 문법 은 다음 과 같 습 니 다.
while condition; do
    commands
done

while 는 파일 의 줄 을 읽 고 해당 하 는 동작 을 합 니 다.
cat file.txt|while read line;do
    echo $line
done
while read line;do
    echo $line
done < file.txt

until 순환: 표현 식 이 성립 되 지 않 습 니 다. 표현 식 이 성립 될 때 까지 do 에서 done 사이 의 작업 을 반복 합 니 다. until 과 while 문 구 는 변환 할 수 있 습 니 다.
until condition; do
    commands
done

예: 다음 스 크 립 트 는 1, 2, 1, 2, 3 을 출력 합 니 다. 조건 [3 - gt 3] 이 false 이기 때문에 do 와 done 사이 의 문 구 를 실행 합 니 다.
#!/bin/bash
i=1
while [ $i -lt 3 ];do
        echo $i
        i=$(( i + 1 ))
done
i=1
until [ $i -gt 3 ];do
        echo $i
        i=$(( i + 1 ))
done

순환 제어: break 와 contine 은 for, while, until 순환 에서 break 는 순환 을 강제로 종료 할 수 있 습 니 다. break 문 구 는 현재 순환 에서 만 종료 할 수 있 습 니 다. 2 층 순환 이 내장 되 어 있 으 면 외부 순환 에서 break 를 사용 해 야 합 니 다.또한 break 2 를 사용 하여 2 층 순환 을 종료 할 수 있 습 니 다. 예 를 들 어 99 곱셈 표 에서 a = 5 를 건 너 뛴 경우 break 와 break 2 의 출력 차 이 를 자체 적 으로 비교 할 수 있 습 니 다.
#!/bin/bash
#for a seq 9;do
#for a {1..9};do
for((a=1;a<10;a++));do
        for((b=1;b<=a;b++));do
                if [[ $a -eq 5 ]];then
                        break
                        #  2   
                        #break 2
                fi
                echo -ne "$a*$b=$((a*b))\t"
                if [[ $b -eq $a ]];then
                        echo
                fi
        done
done

contine 은 스 크 립 트 가 뒤의 문 구 를 뛰 어 넘 고 다음 순환 을 실행 할 수 있 습 니 다. 예 를 들 어 99 곱셈 표 가 b = 2 를 뛰 어 넘 는 경우.
#!/bin/bash
#for a seq 9;do
#for a {1..9};do
for((a=1;a<10;a++));do
        for((b=1;b<=a;b++));do
                if [[ $b -eq 2 ]];then
                        continue
                fi
                echo -ne "$a*$b=$((a*b))\t"
                if [[ $b -eq $a ]];then
                        echo
                fi
        done
done

4. 다 분기 구조 다 분 지 는 if 문 구 를 사용 할 수도 있 고 케이스 를 사용 할 수도 있다.case 의 역할 은 문자열 이 어떤 값 과 같 으 면 그 값 뒤의 동작 을 수행 하 는 것 입 니 다.같은 동작 이 여러 값 에 대응 하면 "|" 을 사용 하여 각 값 을 분리 합 니 다.
if condition; then
command
elif condition; then
command
else
command
fi

case 기본 문법:
case $var in
pattern1)
    commands ;;
pattern2 | pattern3)
    commands ;;
*)
    commands ;;
esac

5. 대화 모드: ① read 명령, read - p "var: 사용자 의 입력 을 알려 주 고 입력 값 을 변수 에 부여 합 니 다.② select 명령 은 한 그룹의 다른 값 에서 선택 할 수 있 습 니 다.그 문법 은 다음 과 같다.
select var in list; do
    break;
done

break 가 없 으 면 수 동 으로 종 료 될 때 까지 계속 실 행 됩 니 다. 예 를 들 어:
#!/bin/bash
read -p "what is your name:" name
echo "hello $name"
#select   
select day in "201611121" "201611122" "201611123"; do
        echo "day choice:$day"
        select time in "23:24:11" "23:25:12" "23:26:13";do
                echo "time choice:$time"
                break
        done
        break
done
echo $day/$time

좋은 웹페이지 즐겨찾기