《 셸 스 크 립 트 학습 지침 서 》 독학 노트 - 입문

\# 이것 은 제 가 독학 한 약간의 필기 와 소감 입 니 다. 잘못 이 있 으 면 지적 해 주세요. 감사합니다.
(1) 간단 한 스 크 립 트
who
\# 로그 인 한 사용 자 를 보 여 줍 니 다. 파 이 프 를 이용 하 십시오.
who | wc -l
\# 로그 인 한 사용자 수 를 표시 합 니 다.who 의 출력 은 wc 의 입력 이 되 었 습 니 다.
다음 단 계 는 파 이 프 를 독립 적 인 명령 으로 바 꿉 니 다.
파이프 파일 을 만 들 고 cat 로 터미널 의 입력 을 복사 합 니 다: cat > nusers
그리고 내용 쓰기: who | wc - l
파일 끝 문자 로 ^ D
이 어 이 파이프 파일 의 권한 을 변경 하여 파일 을 실행 할 수 있 도록 합 니 다: chmod + x nurses
마지막 으로 바로 테스트 를 진행 할 수 있 습 니 다. 
주의:
(1) 파이프 파일 을 쓸 때 오 류 를 입력 하지 마 십시오. 그렇지 않 으 면 delete 나 backspace 로 도 사용 되 지 않 습 니 다. 이 파일 rm 을 떨 어 뜨리 고 다시 쓸 수 밖 에 없습니다.
(2) 우리 의 nusers 셸 스 크 립 트 는 컴 파일 형 프로그램 이 아 닙 니 다. 커 널 은 이러한 형식 을 실행 할 수 없 기 때문에 셸 은 새로운/bim/sh (표준 셸) 복사 본 을 시작 하여 프로그램 을 실행 합 니 다.이 방법 은 여러 개의 셸 을 가 진 시스템 에 적용 되 지 않 기 때문에 커 널 이 지정 한 스 크 립 트 를 어떤 셸 로 실행 해 야 하 는 지 알려 주 는 방법 이 필요 합 니 다. 방법 은 스 크 립 트 파일 의 첫 줄 의 시작 부분 에서\#!이 두 글자.
(2)#!
셸 스 크 립 트 는 보통 처음부터\#!/bin/sh.
학습 중의 일부
함정:\#!이 줄 의 길 이 는 서로 다른 시스템 에서 서로 다른 제한 이 있다.옵션 의 마지막 에 공백 이 있 으 면 안 됩 니 다. 이 공백 도 옵션 과 함께 전 달 됩 니 다.전체 경로 이름 을 쓰 는 것 이 좋 습 니 다.
다음은 수 정 된 간호사 절차 입 니 다.
#!/bin/sh -
who | wc -l

옵션 
- 옵션 이 없다 는 뜻 으로 사기 공격 을 피 할 수 있 습 니 다.
(3) 명령 과 인자
셸 은 $PATH 를 따라 명령 을 찾 습 니 다.
명령 쓰기 규칙:
(1) 공백 분리 명령 행 의 각 구성 부분
(2) 명령 이름 은 명령 행 의 첫 번 째 항목 이 고 그 다음 에 옵션 을 따른다.
(3) 옵션 은 처음에 마이너스 로 시작 한 다음 에 알파벳 을 따 르 면 알파벳 은 여러 개 일 수 있다.
(4) 마지막 으로 같은 줄 의 여러 명령 을 구분 하 는 데 사 용 됩 니 다. 셸 은 순서대로 이 명령 을 수행 합 니 다.& 기 호 를 사용 하면 셸 은 배경 에서 앞의 명령 을 수행 합 니 다. 이것 은 셸 이 이 명령 이 완 료 될 때 까지 기다 리 지 않 아 도 다음 명령 을 계속 수행 할 수 있다 는 것 을 의미 합 니 다.
(4) 변수
셸 변 수 는 길이 제한 이 없습니다. 값 을 할당 할 때 빈 칸 을 추가 할 수 없습니다. 즉, 변수 이름, 이 어 = 문자, 마지막 으로 새 값 입 니 다. 주어진 값 에 빈 칸 이 있 을 때 따옴표 를 추가 해 야 합 니 다.
변수의 값 을 꺼 내 려 면 변수 이름 앞 에 $문 자 를 추가 하 십시오.
예: FullName="fengxiaoke neu"
   Copy_Name=$Full_Name (여기에 따옴표 를 붙 이 든 말 든 상관 없습니다)
주의: 몇 개의 변 수 를 연결 할 때 반드시 더 블 따옴표 를 사용 해 야 합 니 다: FullName="$First $Second $Final"
echo 는 변수의 값 을 출력 할 수 있 습 니 다. 예 를 들 어 echo $FullName;echo "Enter the name:".echo 는 줄 바 꿈 부 호 를 제공 합 니 다. echo 에 전의 문자 가 있 으 니 구 글 을 구 글 할 수 있 습 니 다.
비교적 복잡 한 출력 에 대해 서 는 printf 를 사용 할 수 있 습 니 다.
printf 명령 은 C library 의 printf () 를 모방 하여 거의 모든 기능 을 복사 했다.
예: printf "% s,% s, I 'm happy to help you"Hello world
출력: Hello, world, I 'm happy to help you
(5) I/O 재 설정
<  표준 입력 변경: program < file 은 program 의 표준 입력 을 file 로 변경 할 수 있 습 니 다.
>  표준 출력 변경: program > file 은 program 의 표준 출력 을 file 로 변경 할 수 있 습 니 다. file 이 존재 하지 않 을 때 file 을 새로 만 들 고 존재 하면 원래 의 데 이 터 를 덮어 씁 니 다.
>>  파일 에 추가: program >> file 은 program 의 표준 출력 을 file 의 끝 에 추가 할 수 있 습 니 다. file 의 존재 여 부 를 처리 하 는 방식 은 이미 존재 할 때 만 다 릅 니 다. file 이 존재 할 때 데 이 터 를 덮어 쓰 지 않 고 끝 에 추가 합 니 다.
|  파이프 만 들 기: program 1 | program 2 는 program 1 의 표준 출력 을 program 2 의 표준 입력 으로 수정 할 수 있 습 니 다. 이 파 이 프 는 임시 파일 을 사용 하 는 프로그램 보다 10 배 빠 른 속도 로 실행 할 수 있 습 니 다.
\# < 와 > 는 깔때기 로 상상 할 수 있 습 니 다. 데 이 터 는 큰 한 끝 에서 들 어 오고 작은 한 끝 에서 나 옵 니 다.
(6)/dev/null 과/dev/tty
/dev/null 은 비트 통 입 니 다. 이 파일 로 전 송 된 데 이 터 는 시스템 에서 잃 어 버 립 니 다.이 파일 에 데 이 터 를 기록 할 때 프로그램 은 기록 작업 이 성공 적 으로 완료 되 었 다 고 생각 합 니 다. 사실은 아무 일 도 일어나 지 않 았 습 니 다.반대로 이 파일 을 읽 으 면 바로 EOF 로 돌아 갑 니 다.
/dev/tty 가 열 렸 을 때 시스템 은 자동 으로 터미널 로 재 설정 합 니 다.
(7) 아래 명령 이 무엇 을 했 는 지 살 펴 보 자.
$ cd
$ mkdir bin
$ mv nusers bin
$ PATH=$PATH:$HOME/bin
$ nusers
(8) 다음 명령 이 또 무엇 을 했 는 지 계속 살 펴 본다.
$cat > Find_User
#!/bin/sh
#find a user
who | grep $1
^D
$sudo chmod +x Find_User
$./Find_User fengxiaoke
$mv Find_User $HOME/bin
(이 프로그램 은 아직 완벽 하지 않 습 니 다. 명령 행 매개 변수 수 를 테스트 하 는 기능 을 추가 해 야 합 니 다)
(9) 초학 수행 추적
set -x  추적 기능 실행 하기
set +x  추적 기능 종료
간단 한 예:
$car > Set_Test.sh
#!/bin/sh
set -x  #추적 기능 열기
echo 1st echo  #몇몇 조작 을 집행 하 다
set +x  #추적 기능 닫 기
echo 2nd echo  #몇몇 조작 을 집행 하 다
^D
$sudo chmod +x Set_Test.sh
$./Set_Test.sh
+ echo 1st echo 가 추적 당 한 첫 줄
1st echo  명령 의 출력
+ set +x  미행 당 한 다음 줄
2nd echo  다음 명령 의 출력

좋은 웹페이지 즐겨찾기