고급 Bash 스 크 립 트 프로 그래 밍 안내 (20): 내부 명령 과 내장 명령 (3)

7669 단어 shell
고급 Bash 스 크 립 트 프로 그래 밍 안내 (20): 내부 명령 과 내장 명령 (3)
견지했어
스 크 립 트 행동
source.. (점 명령)
명령 줄 에서 호출 될 때 이 명령 은 스 크 립 트 를 실행 합 니 다. 스 크 립 트 에서 호출 될 때 source file - name 은 file - name 파일 을 불 러 옵 니 다. source 파일 (또는 점 명령) 은 스 크 립 트 에 코드 를 도입 하고 이 코드 를 스 크 립 트 에 추가 합 니 다. (C 언어의\# include 명령 효과 와 같 습 니 다) 최종 결 과 는 "source"를 사용 하 는 것 과 같 습 니 다.의 줄 에 해당 하 는 파일 의 내용 을 삽입 하 였 습 니 다. 여러 스 크 립 트 가 같은 데 이 터 를 참조 하거나 함수 라 이브 러 리 를 사용 해 야 할 경우 이 명령 은 매우 유용 합 니 다.
"include"데이터 파일 의 인 스 턴 스
#!/bin/bash

. data-file    #         .
#  "source data-file"    ,         .

#    "data-file"           ,
#+          'basename'    .

#   ,             .

echo "variable1 (from data-file) = $variable1"
echo "variable3 (from data-file) = $variable3"

let "sum = $variable2 + $variable4"
echo "Sum of variable2 + variable4 (from data-file) = $sum"
echo "message1 (from data-file) is \"$message1\""
#   :                                   

print_message This is the message-print function in the data-file.


exit 0

data - file 내용:
#               .
#           ,   ,   .
#         'source'  '.'     .

#           .

variable1=22
variable2=474
variable3=5
variable4=97

message1="Hello, how are you?"
message2="Enough for now. Goodbye."

print_message ()
{
# echo          .

  if [ -z "$1" ]
  then
    return 1
    #         ,    .
  fi

  echo

  until [ -z "$1" ]
  do
    #              .
    echo -n "$1"
    #    echo     , -n    .
    echo -n " "
    #          .
    shift
    #       .
  done

  echo

  return 0
}

source 가 들 어 온 파일 자체 가 실행 가능 한 스 크 립 트 라면 실행 되 고 호출 된 스 크 립 트 에 제어 권 을 돌려 줍 니 다. source 가 들 어 온 실행 가능 한 스 크 립 트 는 return 명령 을 사용 하여 이 목적 을 달성 할 수 있 습 니 다.
(선택 가능 한) source 파일 에 도 파 라 메 터 를 전달 할 수 있 습 니 다. 이 매개 변 수 는 위치 매개 변수 로 간 주 됩 니 다.
source $filename $arg1 arg2
스 크 립 트 파일 에서 source 자체 도 사용 할 수 있 습 니 다. 실제 응용 가치 가 있 는 지 는 모 르 겠 지만.
source 자체 스 크 립 트 의 인 스 턴 스
#!/bin/bash
# self-source.sh:     "  " source  .
#    "Stupid Script Tricks,"   II.

MAXPASSCNT=100    #         .

echo -n  "$pass_count  "
#           ,     echo 2   ,
#+   $pass_count      .

let "pass_count += 1"
#             $pass_count
#+            +1.
#           Bash pdksh ,   
#+         (      )   .
#           $pass_count  ,          0.

while [ "$pass_count" -le $MAXPASSCNT ]
do
  . $0   #   "source"  ,        .
         # ./$0 (        )        .    ?
done

#                 ,
#+             ,    ,
#+          
#+    'source' ( 20 ) 
#          .
#
#    ,        'source'     "#!" 
#+       ,               .

echo

exit 0   #         1  100.
         #         .

exit
스 크 립 트 의 실행 을 무조건 중단 합 니 다. exit 명령 은 정수 인 자 를 마음대로 얻 은 다음 이 인 자 를 이 스 크 립 트 의 종료 상태 코드 로 사용 할 수 있 습 니 다. 간단 한 스 크 립 트 를 종료 할 때 exit 0 을 사용 하면 좋 은 습관 입 니 다. 성공 적 인 실행 을 나타 내기 때 문 입 니 다.
인자 없 이 exit 명령 을 호출 하여 종료 하면 종료 상태 코드 는 스 크 립 트 의 마지막 명령 의 종료 상태 코드 가 됩 니 다. exit $와 같 습 니까?
exec
이 셸 내장 명령 은 현재 프로 세 스 를 대체 하기 위해 특정한 명령 을 사용 합 니 다. 일반적으로 셸 이 명령 을 만 났 을 때 forks off 키 프로 세 스 를 통 해 명령 을 실행 합 니 다. exec 내장 명령 을 사용 하면 셸 은 fork 를 사용 하지 않 고 명령 의 실행 은 현재 셸 을 대체 합 니 다. 따라서 스 크 립 트 에서 사용 할 때 exec 가 실행 하 는 명령 이 완료 되면그러면 스 크 립 트 를 강제로 종료 합 니 다. 
exec 명령 효 과 를 보 여 주 는 인 스 턴 스
#!/bin/bash

exec echo "Exiting \"$0\"."   #          .

# ----------------------------------
# The following lines never execute.

echo "This echo will never echo."

exit 99                       #             .
                              #          'echo $?'
                              #+         .
                              #     *  * 99.

exec 자체 스 크 립 트 인 스 턴 스
#!/bin/bash
# self-exec.sh

echo

echo "This line appears ONCE in the script, yet it keeps echoing."
echo "The PID of this instance of the script is still $$."
#               fork  shell.

echo "==================== Hit Ctl-C to exit ===================="

sleep 1

exec $0   #              ,
          #+                    .

echo "This line will never echo!"  #        ?

exit 0

exec 명령 은 파일 설명 자 를 재배 치 하 는 데 도 사용 할 수 있 습 니 다. 예 를 들 어 exec < zzz - file 은 stdin 대신 zzz - file 을 사용 합 니 다. 또한 find 명령 의 - exec 옵션 은 셸 에 설 치 된 exec 명령 과 다 릅 니 다.
shopt
이 명령 은 셸 이 한가 할 때 셸 옵션 을 수정 할 수 있 도록 합 니 다. 시작 파일 에 자주 나타 나 지만 일반 스 크 립 트 에 도 자주 나타 납 니 다. 버 전 2 이후 의 Bash 에서 만 지원 합 니 다.
root@haitao-VirtualBox:~# shopt -s cdspell
root@haitao-VirtualBox:~# pwd
/root
root@haitao-VirtualBox:~# cd /hpt
/opt
root@haitao-VirtualBox:/opt# pwd
/opt
root@haitao-VirtualBox:/opt# 

caller
caller 명령 을 함수 에 넣 으 면 stdout 에서 함수 호출 자 정 보 를 출력 합 니 다.
#!/bin/bash

function1 ()
{
  #   function1 ()   .
  caller 0   #        .
}

function1    #     9 .

# 9 main test.sh
# ^                           .
#   ^^^^                "main"       .
#        ^^^^^^^           .

caller 0     #    ,            .

exit 0
caller 명령 도 source 스 크 립 트 에서 호출 자 정 보 를 되 돌려 줄 수 있 습 니 다. 물론 이 호출 자 는 source 스 크 립 트 의 스 크 립 트 입 니 다. 함수 처럼 "하위 루틴 호출"입 니 다. 이 명령 은 디 버 깅 할 때 특히 유용 합 니 다.
명령 하 다.
true
이것 은 상태 코드 를 성공 적 으로 종료 하 는 명령 입 니 다. 그러나 그 외 에는 아무것도 하지 않 습 니 다. c 언어의 문법 과 달리 true 는 상태 0 을 대표 하고 셸 에 서 는 0 이 성공 상 태 를 대표 하 며 c 에 서 는 true 는 보통 > = 1 을 대표 합 니 다.
while true   #    true   ":"   
do
   operation-1
   operation-2
   ...
   operation-n
   #              ,           .
done

false
실패 한 상태 코드 를 되 돌려 주 는 명령 이지 만 그 외 에는 아무것도 하지 않 습 니 다.
#    "false"
if false
then
  echo "false evaluates \"true\""
else
  echo "false evaluates \"false\""
fi
#       "false"

# while "false"    (   )
while false
do
   #            .
   operation-1
   operation-2
   ...
   operation-n
   #        !
done

type [cmd]
외부 명령 which 와 비슷 합 니 다. type cmd 는 "cmd"의 전체 경 로 를 제공 합 니 다. which 명령 과 달리 type 명령 은 Bash 내 건 명령 입 니 다. - a 는 type 명령 의 매우 유용 한 옵션 입 니 다. 매개 변수 가 키워드 인지 내 건 명령 인지 감별 할 수도 있 고 같은 이름 의 시스템 명령 을 찾 을 수도 있 습 니 다.
root@haitao-VirtualBox:~# type ls
ls is aliased to `ls --color=auto'
root@haitao-VirtualBox:~# which ls
/bin/ls
root@haitao-VirtualBox:~# type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
root@haitao-VirtualBox:~

hash [cmds]
셸 의 hash 표 에 지정 한 명령 의 경로 이름 을 기록 합 니 다. 따라서 셸 이나 스 크 립 트 에서 이 명령 을 호출 하면 $PATH 에서 이 명령 을 다시 검색 할 필요 가 없습니다. 매개 변수 가 없 는 hash 명령 을 호출 하면 hash 명령 이 있 는 모든 명령 을 표시 합 니 다. - r 옵션 을 사용 하면 hash 표를 다시 설정 합 니 다.
bind
bid 내장 명령 은 readline 의 키 바 인 딩 을 표시 하거나 수정 합 니 다.
help
셸 내장 명령 의 작은 사용 정 리 를 얻 었 습 니 다. whatis 명령 과 비슷 하지만 help 명령 은 내장 명령 입 니 다.
root@haitao-VirtualBox:~# help exit
exit: exit [n]
    Exit the shell.
    
    Exits the shell with a status of N.  If N is omitted, the exit status
    is that of the last command executed.
root@haitao-VirtualBox:~# whatis exit
exit (3)             - cause normal process termination
exit (2)             - terminate the calling process
root@haitao-VirtualBox:~# 

먼저 여기까지, O (∩ ∩) O ~
내 칼럼 주소:http://blog.csdn.net/column/details/shell-daily-study.html
계속

좋은 웹페이지 즐겨찾기