Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

4개의 예제 셸 스크립트로 설명된 Bash 특수 매개변수

진행 중인 bash 자습서 시리즈의 일부로 이전 기사에서 bash 위치 매개변수에 대해 논의했습니다. 이 기사에서는 실용적인 쉘 스크립트 예제가 거의 없는 bash 특수 매개변수에 대해 논의합니다.

이 기사에서 논의할 bash 특수 매개변수는 $*, $@, $#, $$, $!, $?, $-, $_

입니다.

위치 매개변수의 전체 목록에 액세스하기 위해 두 개의 특수 매개변수 $* 및 $@를 사용할 수 있습니다. 큰따옴표를 제외하고 이 두 가지는 동일합니다. 둘 다 $1(공백으로 구분)로 시작하는 위치 매개변수 목록으로 확장됩니다.

그러나 큰따옴표 내에서는 다릅니다. 한 쌍의 큰따옴표 안에 있는 $*는 IFS "$1c$2c$3..."의 첫 번째 문자로 구분된 위치 매개변수 목록과 같습니다.

한 쌍의 큰따옴표 안에 있는 $@는 따옴표 없이 공백으로 구분된 위치 매개변수 목록과 동일합니다(예:"$1" "$2".."$N").

예시 1:Bash $* 및 $@를 사용하여 위치 매개변수 확장

이 예는 $* 및 $@에서 사용할 수 있는 값을 보여줍니다.

먼저 아래와 같이 expan.sh를 생성합니다.

<센터>
$ cat expan.sh
#!/bin/bash

export IFS='-'

cnt=1

# Printing the data available in $*
echo "Values of \"\$*\":"
for arg in "$*"
do
 echo "Arg #$cnt= $arg"
 let "cnt+=1"
done

cnt=1

# Printing the data available in $@
echo "Values of \"\$@\":"
for arg in "$@"
do
 echo "Arg #$cnt= $arg"
 let "cnt+=1"
done

다음으로 $*와 $@가 어떻게 동작하는지 보기 위해 아래와 같이 expan.sh를 실행합니다.

$ ./expan.sh "This is" 2 3
Values of "$*":
Arg #1= This is-2-3
Values of "$@":
Arg #1= This is
Arg #2= 2
Arg #3= 3
  • 위의 스크립트는 IFS(Internal Field Separator) 값을 '-'로 내보냈습니다.
  • expan.sh $1=”This is”,$2=”2″ 및 $3=”3″ 스크립트에 전달된 세 개의 매개변수가 있습니다.
  • 특수 매개변수 "$*"의 각 값을 인쇄할 때 IFS로 구분된 전체 위치 매개변수인 하나의 값만 제공합니다.
  • "$@"는 각 매개변수를 별도의 단어로 제공합니다.

예시 2:$#를 사용하여 위치 매개변수 계산

$#는 bash의 특수 매개변수로 소수점 위치 매개변수의 수를 제공합니다.

먼저 아래와 같이 arithmetic.sh를 생성합니다.

$ cat arithmetic.sh
#!/bin/bash

if [ $# -lt 2 ]
then
 echo "Usage: $0 arg1 arg2"
 exit
fi

echo -e "\$1=$1"
echo -e "\$2=$2"

let add=$1+$2
let sub=$1-$2
let mul=$1*$2
let div=$1/$2

echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"

위치 매개변수의 수가 2보다 작으면 아래와 같이 사용 정보를 던집니다.

$ ./arithemetic.sh 10
Usage: ./arithemetic.sh arg1 arg2

예시 3:프로세스 관련 매개변수 – $$ 및 $!

특수 매개변수 $$는 쉘의 프로세스 ID를 제공합니다. $! 가장 최근에 실행된 백그라운드 프로세스의 프로세스 ID를 제공합니다.

다음 스크립트는 쉘의 프로세스 ID와 마지막 실행 백그라운드 프로세스 ID를 출력합니다.

$ cat proc.sh
#!/bin/bash

echo -e "Process ID=$$"

sleep 1000 &

echo -e "Background Process ID=$!"

이제 위의 스크립트를 실행하여 출력되는 프로세스 ID를 확인합니다.

$ ./proc.sh
Process ID=9502
Background Process ID=9503
$ ps
 PID TTY TIME CMD
 5970 pts/1 00:00:00 bash
 9503 pts/1 00:00:00 sleep
 9504 pts/1 00:00:00 ps
$

예시 4:기타 Bash 특수 매개변수 – $?, $-, $_

  • $? 가장 최근에 실행된 명령의 종료 상태를 제공합니다.
  • $- set 내장 명령을 사용하여 설정한 옵션
  • $_ 이전 명령에 마지막 인수를 제공합니다. 셸 시작 시 실행 중인 셸 스크립트의 절대 파일 이름을 제공합니다.
$ cat others.sh
#!/bin/bash

echo -e "$_"; ## Absolute name of the file which is being executed

/usr/local/bin/dbhome # execute the command.
#check the exit status of dbhome
if [ "$?" -ne "0" ]; then
 echo "Sorry, Command execution failed !"
fi

echo -e "$-"; #Set options - hB

echo -e $_ # Last argument of the previous command.

위 스크립트에서 마지막 echo 문 "echo -e $_"($ 밑줄)도 이전 명령의 마지막 인수 값인 hB를 출력합니다. 따라서 $_는 확장 후 값을 제공합니다.

$ ./others.sh
./others.sh
/home/oracle
Sorry, Command execution failed !
hB
hB