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

6가지 실제 예제가 포함된 Bash 셸 함수 자습서

6가지 실제 예제가 포함된 Bash 셸 함수 자습서Bash 셸 기능은 그룹의 단일 이름을 사용하여 나중에 실행할 수 있도록 여러 UNIX/Linux 명령을 그룹화하는 방법입니다. . Bash 쉘 기능은 일반 Unix 명령처럼 실행할 수 있습니다. 쉘 함수는 이를 해석하기 위한 새로운 프로세스를 생성하지 않고 현재 쉘 컨텍스트에서 실행됩니다.

bash 별칭과 함수를 모두 사용하면 더 길거나 복잡한 명령에 대한 바로 가기를 정의할 수 있습니다. 그러나 별칭은 제어 흐름, 인수 및 이 자습서에서 설명하는 것처럼 이러한 함수가 허용하는 기타 속임수를 허용하지 않습니다.

이 기사는 진행중인 bash 튜토리얼 시리즈의 일부입니다. bash 소개, bash 존재 상태 및 bash 별칭 예제에 대한 이전 자습서를 참조하십시오.

bash 함수를 만드는 구문:

function functionname()
{
commands
.
.
}
  • 기능 선택 사항인 키워드입니다.
  • 함수 이름 함수의 이름입니다.
  • 명령 – 함수에서 실행할 명령 목록입니다.

함수는 인수를 받아들입니다. 실행하는 동안 함수에 대한 인수는 위치 매개변수가 됩니다. 위치 매개변수 0은 변경되지 않은 상태로 유지되는 스크립트 이름을 갖습니다.

아래와 같이 명령줄에서 bash 함수를 호출할 수 있습니다.

$ functionname arg1 arg2
  • 쉘이 Linux 명령을 해석할 때 먼저 break, continue, eval, exec 등과 같은 특별한 내장 함수를 살펴본 다음 쉘 함수를 찾습니다.
  • bash 함수의 종료 상태는 함수 본문에서 마지막으로 실행된 명령의 종료 상태입니다.

참고: 셸 시작 파일(예:.bash_profile )에 셸 함수 정의를 배치합니다. 이렇게 하면 명령줄에서 항상 쉘 기능을 사용할 수 있습니다. .bash_profile이 언제 실행되는지 확인하려면 이전 bash 실행 시퀀스 문서를 참조하십시오.

예시 1:주어진 확장자를 가진 긴 파일 목록을 표시하는 기능

"lsext" 함수는 아래와 같이 주어진 확장자를 가진 현재 디렉토리에서 파일 목록을 찾는 데 사용됩니다. 이 함수는 find 명령과 ls 명령의 조합을 사용하여 작업을 완료합니다.

<센터>
$ function lsext()
{
find . -type f -iname '*.'${1}'' -exec ls -l {} \; ;
}

$ cd ~

$ lsext txt
-rw-r--r-- 1 root root 24 Dec 15 14:00 InMorning.txt
-rw-r--r-- 1 root root 184 Dec 16 11:45 Changes16.txt
-rw-r--r-- 1 root root 458 Dec 18 11:04 Changes18.txt
-rw-r--r-- 1 root root 1821 Feb 4 15:01 ChangesOfDB.txt

예제 2. 파일 그룹에 대해 주어진 Linux 명령을 실행하는 Bash 함수

다음 예에서 "batchexec" 함수는 주어진 확장자를 가진 파일을 찾고 선택된 파일에 대해 주어진 명령을 실행합니다.

$ function batchexec()
{
find . -type f -iname '*.'${1}'' -exec ${@:2} {} \; ;
}

$ cd ~

$ batchexec sh ls

$ batchexec sh chmod 755

$ ls -l *.sh
-rwxr-xr-x 1 root root 144 Mar 9 14:39 debug.sh
-rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh
-rwxr-xr-x 1 root root 22 Mar 18 08:32 t.sh

위의 예에서 확장자가 .sh인 모든 쉘 스크립트 파일을 찾아 권한을 755로 변경합니다. (사용자, 그룹 및 기타 읽기 및 실행 권한에 대한 모든 권한). 함수 정의에서 두 번째 및 다음 위치 매개변수를 제공하는 "${@:2}"를 확인할 수 있습니다(쉘 확장 기능).

예시 3. 임의의 비밀번호를 생성하는 Bash 함수

다음 함수는 주어진 길이에 대한 특수 문자로 임의의 강력한 암호를 생성하는 데 사용됩니다. 길이가 기본적으로 주어지지 않으면 12자 길이로 생성됩니다.

$ function rpass() {
 cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12}
}

$ rpass 6
-Ju.T[[

$ rpass
Gz1f!aKN^""k

위의 예에서 rpass를 인수 6으로 실행하면 6자의 임의의 암호를 생성하고 인수가 없는 rpass는 12자의 암호를 생성합니다. ${1:-12}는 $1이 설정되지 않았거나 null 12가 반환되면 $1의 값이 대체됨을 의미합니다.

예제 4. 주어진 인터페이스의 IP 주소를 얻기 위한 Bash 함수

다음 예제는 인터페이스 이름을 인수로 받아들이고 머신의 주어진 인터페이스에 할당된 IP 주소를 제공하는 'getip'이라는 함수를 정의합니다. (기본적으로 eth0 ip address를 반환합니다). 이것은 IP 주소를 얻기 위해 ifconfig 명령을 사용합니다.

$ function getip()
{
/sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}';
}

$ getip
15.110.106.86

$ getip eth0
15.110.106.86

$ getip lo
127.0.0.1

예제 5. 머신 세부 정보를 출력하는 Bash 함수

이 예는 기계에 대한 모든 필수 정보를 제공하는 기능을 정의합니다. 사용자는 시작 파일에서 이 함수를 정의하고 호출할 수 있으므로 시작하는 동안 이러한 정보를 얻을 수 있습니다.

$ function mach()
{
 echo -e "\nMachine information:" ; uname -a
 echo -e "\nUsers logged on:" ; w -h
 echo -e "\nCurrent date :" ; date
 echo -e "\nMachine status :" ; uptime
 echo -e "\nMemory status :" ; free
 echo -e "\nFilesystem status :"; df -h
}

$ mach
Machine information:
Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux

Users logged on:
root pts/2 ptal.mot Wed10 0.00s 1.35s 0.01s w -h

Current date :
Thu Mar 18 11:59:36 CET 2010

Machine status :
 11:59:36 up 7 days, 3 min, 1 user, load average: 0.01, 0.15, 0.15

Memory status :
 total used free shared buffers cached
Mem: 2059768 2033212 26556 0 81912 797560
-/+ buffers/cache: 1153740 906028
Swap: 4192956 48164 4144792

Filesystem status :
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 12G 12G 0 100% /
tmpfs 1006M 377M 629M 38% /dev/shm
/dev/sdc5 9.9G 409M 9.0G 5% /mydisk

예시 6:ls 출력을 더 잘 형식화하기 위한 Bash 함수

다음 함수는 화면을 지우고 커서를 화면 상단에 놓고 ls를 실행한 다음 화면 끝에 커서를 놓습니다.

$ function ll ()
{
 clear;
 tput cup 0 0;
 ls --color=auto -F --color=always -lhFrt;
 tput cup 40 0;
}

$ ll

유형 명령을 사용하여 기능 코드 표시

type은 함수 코드를 보는 데 사용되는 내장 쉘입니다.

Syntax:
type function-name
$ type ll
ll is a function
ll ()
{
 clear;
 tput cup 0 0;
 ls --color=auto -F --color=always -lhFrt;
 tput cup 40 0;
 alias ls="ls --color=auto -F"
}

쉽게 참조할 수 있도록 이 샘플 .bash_profile 함수 파일에서 이 기사에서 언급한 6가지 함수를 모두 가져옵니다.

이러한 모든 기능을 ~/.bash_profile 파일에 추가하여 매번 만들 필요 없이 항상 이러한 기능에 액세스할 수 있도록 합니다.