고급 Bash 스 크 립 트 프로 그래 밍 안내 (20): 내부 명령 과 내장 명령 (3)
7669 단어 shell
견지했어
스 크 립 트 행동
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
계속
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.