셸 스 크 립 트 학습 안내서[1](Arnold Robbins&Nelson H.F.Beebe 저)

제1장 은 생략 하고 다음은 제2 장 부터 모두 가 알 고 있다.ps:여기 아주 아 픈 일이 생 겼 어 요.아주!이미 4 장 까지 코드 를 찍 었 습 니 다.비극 적 으로 브 라 우 저 버튼 을 잘못 누 르 면 새로 고침 되 고 전에 쓴 것 을 찾 을 수 없습니다.죽 고 싶 어!됐어,복습 하면 서 해.아래 의 전문 은 모두 자신 이 총 결 하여 쓴 것 입 니 다.잘못된 부분 이 있 는 것 도 반드시 책 속 의 잘못 이 아 닙 니 다.(물론 책 속 의 잘못 일 수도 있 지만 제 가 직접 조작 할 것 입 니 다)제 가 잘못 쓴 것 일 수도 있 습 니 다.큰 소 에 게 지적 해 주 십시오.
제2 장 입문 은 두 번 째 쓰기 때문에 간단하게 빨리 쓰 세 요.되도록 정확하게 쓰 세 요.모두 가 알 고 있 는 터미널 명령 cd,chmod,who 와 같은 조합 에 제어 문 구 를 추가 하면 변 수 는 셸 프로 그래 밍 이 되 고 간단 한 예 를 들 어 보 겠 습 니 다.

$ cat > nusers
#! /bin/sh
who | wc -l
^D
$ chmod +x nusers
$ ./nusers
위 에 nusers 파일 은 완전한 셸 스 크 립 트 입 니 다.얼마나 많은 사용자 로그 인 시스템 을 조회 하 는 기능 입 니 다.cat>nusers 는 nusers 파일 로 데이터 흐름 을 입력 합 니 다.\#!이 말 은\#번 다음 에는 모두 주석 이지 만\#!해석 기 에서 읽 을 수 있 습 니 다.시스템 이 어떤 해석 기 를 사용 해 야 하 는 지 알려 주기 때 문 입 니 다.여기 가 바로/bin/sh 입 니 다.^D 는 ctrl+d 로 입력 을 끝 냅 니 다.chmod 는 실행 가능 한 권한 을 증가 하고 마지막 으로 자신 이 쓴 스 크 립 트 를 실행 합 니 다.이렇게 하면 실행 에 사용 할 때 까지 완전 하 게 작 성 된 과정 이다.입문 하 셨 어 요?어~나무 가 있다 면 글 을 바 꿔 보 자)
이제 개선 해 보 겠 습 니 다.시스템 내 명령 처럼 프로그램 을 실행 할 수 있 도록 시스템 환경 변수 PATH 를 수정 할 수 있 습 니 다.windows 를 수정 한 어린이 신발 도 알 고 있 습 니 다.Liux 도 마찬가지 로 시스템 검색 명령 을 할 때 검색 경로 근 거 를 가지 기 위해 서 입 니 다.먼저 출력 해 보 세 요:echo$PATH.결 과 는 구분자 로 된 문자열 을 출력 하 는 것 입 니 다.다시 값 을 부여 합 니 다.사용자 디 렉 터 리 에 있 는 my shell 폴 더 에 셸 코드 가 존재 한다 고 가정 합 니 다.그러면 우 리 는 이렇게 값 을 부여 합 니 다:PATH=$PATH:$HOME/myshell.그러면 우 리 는 nusers 명령 을 직접 실행 하여 사용자 로그 인 수의 정 보 를 얻 을 수 있 습 니 다.
여기 서 두 가지 명령 을 배 웁 니 다.잘못 생각 했 습 니 다.who 와 wc 가 아니 라 가장 기본 적 인 출력 hello,World 부터 시작 하 는 것 입 니 다.그래서 echo 와 printf 를 먼저 배 웁 니 다.전 자 는 매우 간단 합 니 다.예 를 들 어 echo hello,World.c 언어 를 할 줄 아 는 친 구 는 즐 거울 수 있 습 니 다.printf 를 더 이상 공부 하지 않 아 도 되 기 때 문 입 니 다.기 회 는 똑 같 습 니 다.예 를 들 어 printf"hello,%s",World.그러면 hello,World 를 수출 하고 줄 을 바 꿉 니 다(c 를 모 르 는 어린이 신발 은 없 겠 죠?).
그리고 전에 나 왔 던 것 을 다시 한 번 말씀 드 리 겠 습 니 다.이것 은)),이것 은 기본 적 인 I/O 로 방향 을 바 꾸 었 습 니 다.windows 에서 cmd 명령 을 사용 하고 아 는 것 도 건 너 뛸 수 있 습 니 다.>출력 방향 을 바 꿉 니 다.<입력파 이 프 는 기호 앞의 출력 정 보 를 기호 후의 입력 정보 로 여 긴 다.또한>><,하나의 차이 점 은 존재 하 는 파일 을 덮어 쓰 고 없 으 면 만 드 는 것 입 니 다.두 개 는 덮어 쓰 지 않 고 기 존 파일 뒤에 만 추가 합 니 다.
이 방향 을 바 꾸 는 것 을 연습 하기 위해 tr 명령 을 배 웁 니 다.주로 농축 문 자 를 삭제 하 는 데 사 용 됩 니 다.문법:tr[options]source-char-list replace-char-list 옵션:-c 는 source 의 반 의 를 가 져 옵 니 다.즉,tr 가 변환 할 문 자 는 source 에 열거 되 어 있 지 않 습 니 다.보통-d-s 는-d 를 사용 하여 표준 입력 으로 source-char-list 에 열 거 된 문 자 를 삭제 합 니 다.-s 농축 중복 문자.간이 배합 재 정립 연습.어떻게 농축 되 고 어떻게 교체 되 는 지 보 자.
여기 서 두 개의 특수 파일 을 소개 합 니 다./dev/null 과/dev/tty 는 전자 가 이 파일 에 전송 한 데 이 터 는 모두 시스템 에 버 려 집 니 다.쓰레기통 과 유사 합 니 다.그 중에서 데 이 터 를 읽 으 면 null 까지 만 읽 을 수 있 습 니 다.다른/dev/tty 는 프로그램 이 이 파일 을 열 때 Liux 는 자동 으로 터미널(콘 솔 이나 직렬 포트 또는 네트워크 와 창 로그 인 위조 터미널 등)로 재 설정 하여 프로그램 과 결합 합 니 다.이것 은 프로그램 이 인공 입력 을 읽 어야 할 때 특히 유용 하고 오류 정 보 를 만 드 는 데 도 사용 할 수 있다.예:

printf "Enter new password:" #
stty -echo #
read pass < /dev/tty #
printf :Enter again:" #
read pass2 < /dev/tty #
stty echo #
stty(set tty)명령 은 터미널(또는 창)의 각종 설정 을 제어 하 는 데 사 용 됩 니 다.
이 제 는 셸 스 크 립 트 를 쓸 수 있 고 시스템 내 명령 처럼 호출 할 수 있 습 니 다.하지만 무엇이 부족 합 니까?맞습니다.바로 파 라 메 터 를 전달 하고 자신의 스 크 립 트 프로그램 에 파 라 메 터 를 전달 하여 더욱 풍부 한 기능 을 실현 하 는 것 입 니 다.
스 크 립 트 에서 인 자 를 얻 는 것 은 매우 간단 합 니 다.첫 번 째 인 자 는$1 이 고 두 번 째 인 자 는$2 입 니 다.그러나 9 가 넘 는 것 은 모두 큰 괄호 로 숫자 를 묶 습 니 다.예 를 들 어${10}.다음 에 완전한 스 크 립 트 프로그램 을 쓰 십시오:

$ cat > finduser
#! /bin/sh
#finduser ---
who | grep $1
^D
$ chmod +x finduser
$ finduser root
전 제 는 앞에서 도 환경 변수 PATH 를 넘 어야 한 다 는 것 이다.(어떻게 고 쳐 야 할 지 모 르 겠 으 니 앞으로 찾 아 보 세 요)
우 리 는 이미 스 크 립 트 를 쓸 수 있 지만 오류 가 발생 할 수 있 습 니 다.예상 에 미 치지 못 할 수도 있 습 니 다.c++처럼 debug 가 필요 합 니 다.명령 줄 에서 sh-x finduser 를 직접 실행 하여 추적 기능 을 열 수 있 습 니 다.스 크 립 트 에서 set-x 명령 으로 추적 기능 을 열 고 set+x 로 닫 을 수도 있 습 니 다.
삼 강 소 도

좋은 웹페이지 즐겨찾기