bash 변수에서 Linux 명령을 사용하는 방법

고푸

아래 명령과 동일한 작업을 수행하기 위해 bash 스크립트를 만들려고합니다.

dig -x 8.8.8.8 | grep PTR | cut -d ' ' -f 2 | grep google | cut -f 5

출력은 google-public-dns-a.google.com.

이제 아래와 같이 test.sh 스크립트를 만들었습니다.

#!/bin/bash
IP=$1
output1=$(dig -x $IP)
grepg="grep PTR | cut -d ' ' -f 2 | grep google | cut -f 5"
go=$($output1 | $grepg)
echo $go

스크립트를 ./test.sh 8.8.8.8로 불렀습니다. 그러나 오류가 발생합니다. 따옴표를 사용하여 bash 변수에 Linux 명령을 효과적으로 저장할 수 있습니까?
감사

브라이언 캠벨

여기에 몇 가지 문제가 있습니다.

첫 번째는 당신이 명령 변수의 내용으로 실행하기 위해 노력하고 있다는 것입니다 $ouptut1단지이며, dig출력; 명령이 아닙니다. 당신은 아마 echo $output1.

그런 다음 변수의 내용을 $grepg파이프 라인으로 실행하려고합니다 . 그러나 복합 명령 (파이프 라인은 복합 명령)의 구성 요소로 행을 구문 분석하는 것은 매개 변수 확장 전에 발생합니다. 따라서 다음과 같이 실행하면 :

foo="echo hello | grep hi"
$foo

이것은 먼저 하나의 간단한 명령으로 분리 된 다음 명령이 확장 된 다음 인수로 구문 분석됩니다. 따라서 이것은 실행하는 것과 동일합니다.

echo hello "|" grep hi

일반적으로 평가할 텍스트 문자열을 변수에 저장하는 것은 좋지 않습니다. 당신이 그것을 원할 수있는 아주 특별한 경우가 몇 가지 있지만, 거의 모든 경우에 (그리고 아마도 당신의 경우) 그것을하는 더 좋은 방법이 있습니다. 이에 대해 경고 하겠지만 실제로 문자열을 명령으로 평가하려면를 사용할 수 있습니다 eval. 예를 들면 다음과 같습니다.

go=$(echo $output1 | eval $grepg)

당신이 원하는 것은 쉘 함수를 정의하는 것입니다. 해당 파이프 라인을 여러 번 재사용하고이를 통해 여러 다른 값을 실행하려면 쉘 함수를 정의하기 만하면됩니다. 이 함수는 포함 된 명령과 동일한 역할을하는 단일 명령입니다.

function grepg() {
    grep PTR | cut -d ' ' -f 2 | grep google | cut -f 5
}

go=$(echo $output1 | grepg)

코드를 더 단순화하기 위해 모든 중간 변수를 피할 수 있습니다. dig명령 의 결과를으로 파이프하려는 grepg경우에는이를 수행하기 전에 변수에 저장할 필요가 없습니다. 그리고 결과를 stdout에 에코하려면 다시 변수에 저장할 필요가 없습니다. 출력을 stdout으로 보낼 수 있습니다.

#!/bin/bash
IP=$1
function grepg() {
    grep PTR | cut -d ' ' -f 2 | grep google | cut -f 5
}

dig -x $IP | grepg

여기서는 스크립트에서 여러 번 사용할 수 있도록 함수를 제외하고 싶다고 가정합니다. 그렇지 않은 경우 한 번만 사용하려는 경우 다음과 같이 더 단순화 할 수 있습니다.

#!/bin/bash
IP=$1
dig -x $IP | grep PTR | cut -d ' ' -f 2 | grep google | cut -f 5

이와 같은 파이프 라인을 변수에 저장하여 다른 코드를 사용하여 두 함수 사이를 결정하고 어떤 조건에 따라 하나 또는 다른 것을 적용하려면 위와 같이 함수를 정의하는 것이 좋습니다. 그런 다음 변수에 단일 함수 이름을 저장합니다. 예상대로 작동합니다.

function grepg() {
    grep PTR | cut -d ' ' -f 2 | grep google | cut -f 5
}

function grepf() {
    # do something else, I'm not creative enough to come up with a good example
}

if [ "$2" = "foo" ]
then
    func=grepg
else
    func=grepf
fi

dig -x $IP | $func

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

bash 내에서 awk 명령에서 bash 변수를 사용하는 방법

분류에서Dev

.gitconfig 별칭에서 bash 명령을 사용하는 방법

분류에서Dev

Windows의 Bash에서 시작 명령을 사용하는 방법

분류에서Dev

Linux에서 dpkg --set-selections 명령을 사용하는 방법

분류에서Dev

linux + echo 명령에서 굵게 tput을 사용하는 방법

분류에서Dev

linux + echo 명령에서 굵게 tput을 사용하는 방법

분류에서Dev

Windows 10의 Apache NiFi에서 Linux bash 명령을 실행하는 방법

분류에서Dev

Linux 명령에서 사용자 정의 변수 이름을 사용하는 방법은 무엇입니까?

분류에서Dev

Linux에서 exec 명령을 사용하여 wget 명령을 사용하는 방법은 무엇입니까?

분류에서Dev

bash / awk 명령을 변수에 넣는 방법 (명령 출력이 아님)

분류에서Dev

bash 명령 줄에서 awk의 출력을 사용하는 방법

분류에서Dev

Bash : 명령에서 변수의 내용을 호출하거나 수정하는 방법은 무엇입니까?

분류에서Dev

Linux에서 사용자 로그인 전에 명령을 실행하는 방법

분류에서Dev

Linux regex 명령을 사용하여 범위에 줄을 곱하는 방법

분류에서Dev

bash 명령을 통해 Github Secret에서 환경 변수를 채우는 방법

분류에서Dev

Jenkins 파이프 라인 / Linux에서 다음 명령을 사용하는 방법

분류에서Dev

명령 줄에서 bash 변수 사용에 대한 도움말을 얻는 방법은 무엇입니까?

분류에서Dev

이식 가능한 스크립트에서 linux bash "sort"명령을 사용하는 방법은 무엇입니까?

분류에서Dev

찾기 명령에서 Linux의 {} 매개 변수에 정규식을 적용하는 방법

분류에서Dev

한 명령의 출력을 다른 명령에 대한 bash 완성으로 사용하는 방법

분류에서Dev

Linux / Bash, FIFO 대기열에서 명령을 예약하는 방법은 무엇입니까?

분류에서Dev

Bash 산술 명령에서 보조 명령을 중첩하는 방법

분류에서Dev

내 Linux 배포판에서 명령을 사용할 수 있는지 확인하는 방법

분류에서Dev

bash 스크립트에서 단일 명령을 사용하여 모든 파일을 복사하는 방법

분류에서Dev

Bash : 함수에 명령을 전달하는 방법

분류에서Dev

bash 명령의 출력을 Github Action 매개 변수에 전달하는 방법

분류에서Dev

서브 쉘을 생성하지 않고 변수에 명령 출력을 저장하는 방법 [Bash <v4]

분류에서Dev

bash에서 tail -f 명령을 중단하는 방법

분류에서Dev

bash 명령에서 하위 문자열을 얻는 방법

Related 관련 기사

  1. 1

    bash 내에서 awk 명령에서 bash 변수를 사용하는 방법

  2. 2

    .gitconfig 별칭에서 bash 명령을 사용하는 방법

  3. 3

    Windows의 Bash에서 시작 명령을 사용하는 방법

  4. 4

    Linux에서 dpkg --set-selections 명령을 사용하는 방법

  5. 5

    linux + echo 명령에서 굵게 tput을 사용하는 방법

  6. 6

    linux + echo 명령에서 굵게 tput을 사용하는 방법

  7. 7

    Windows 10의 Apache NiFi에서 Linux bash 명령을 실행하는 방법

  8. 8

    Linux 명령에서 사용자 정의 변수 이름을 사용하는 방법은 무엇입니까?

  9. 9

    Linux에서 exec 명령을 사용하여 wget 명령을 사용하는 방법은 무엇입니까?

  10. 10

    bash / awk 명령을 변수에 넣는 방법 (명령 출력이 아님)

  11. 11

    bash 명령 줄에서 awk의 출력을 사용하는 방법

  12. 12

    Bash : 명령에서 변수의 내용을 호출하거나 수정하는 방법은 무엇입니까?

  13. 13

    Linux에서 사용자 로그인 전에 명령을 실행하는 방법

  14. 14

    Linux regex 명령을 사용하여 범위에 줄을 곱하는 방법

  15. 15

    bash 명령을 통해 Github Secret에서 환경 변수를 채우는 방법

  16. 16

    Jenkins 파이프 라인 / Linux에서 다음 명령을 사용하는 방법

  17. 17

    명령 줄에서 bash 변수 사용에 대한 도움말을 얻는 방법은 무엇입니까?

  18. 18

    이식 가능한 스크립트에서 linux bash "sort"명령을 사용하는 방법은 무엇입니까?

  19. 19

    찾기 명령에서 Linux의 {} 매개 변수에 정규식을 적용하는 방법

  20. 20

    한 명령의 출력을 다른 명령에 대한 bash 완성으로 사용하는 방법

  21. 21

    Linux / Bash, FIFO 대기열에서 명령을 예약하는 방법은 무엇입니까?

  22. 22

    Bash 산술 명령에서 보조 명령을 중첩하는 방법

  23. 23

    내 Linux 배포판에서 명령을 사용할 수 있는지 확인하는 방법

  24. 24

    bash 스크립트에서 단일 명령을 사용하여 모든 파일을 복사하는 방법

  25. 25

    Bash : 함수에 명령을 전달하는 방법

  26. 26

    bash 명령의 출력을 Github Action 매개 변수에 전달하는 방법

  27. 27

    서브 쉘을 생성하지 않고 변수에 명령 출력을 저장하는 방법 [Bash <v4]

  28. 28

    bash에서 tail -f 명령을 중단하는 방법

  29. 29

    bash 명령에서 하위 문자열을 얻는 방법

뜨겁다태그

보관