여러 함수를 사용하여 한 줄로 출력 받기

여러 함수를 사용하여 한 줄로 출력 받기

호스트 이름, SSH 프로토콜 및 루트 로그인 정보가 포함된 Bash 스크립트에서 출력을 생성하려고 합니다.

이를 위해 Bash 기능을 사용하고 싶습니다. 파일 이 있는데 .sh작동하지 않습니다. 이 코드의 문제점은 무엇입니까?

서버 버전:레드햇 7

예상되는 출력은 다음과 같습니다.

xyz|hostname|Protocol X|Root Access Denied

출력을 시작하고 싶습니다"엑스시즈"나중에 내 출력을 구문 분석합니다.

#!/bin/bash
     
host(){
         local tmpfile=$(mktemp)
         hostname > "$tmpfile"
         printf '%s' "$tmpfile"
}
     
protocol(){
        local infile="$1"
     
        cat /etc/ssh/sshd_config  | grep Protocol
}
     
rootlogin(){
        local infile="$1"
     
        if [[ $(sudo cat /etc/ssh/sshd_config | grep -i "PermitRootLogin yes" | grep -v "#PermitRootLogin yes") = "PermitRootLogin yes" ]];      
                echo  $host
        else
                echo "Root Access Denied"
        fi
}
}

tmpfile=$( host )
{
        host "$tmpfile"
        protocol "$tmpfile"
        rootlogin "$tmpfile"
} > fonk.out
     
rm -f "$tmpfile"

답변1

스크립트의 잘못된 들여쓰기와 레이아웃으로 인해 질문이 어수선해졌지만 기본적인 대답은 다음과 같습니다.

printf '%s|%s|%s|%s\n' "$(field1)" "$(field2)" "$(field3") "$(field4)"

이를 리팩터링하고 들여쓰기 등을 정리하면 스크립트는 다음과 같습니다.

#!/bin/bash

host(){
    hostname
}

protocol(){
    # avoid useless use of cat; get rid of unused parameter
    # ... do you need sudo here too?
    grep Protocol /etc/ssh/sshd_config
}

rootlogin(){
    # straighten out massive spaghetti pretzel; remove unused parameter
    # ... can you avoid sudo cat here?
    if sudo cat /etc/ssh/sshd_config |
        grep -v "#PermitRootLogin yes" |
        grep -i -q "PermitRootLogin yes"
    then
        # Fix quoting
        echo "$host"
    else
        echo "Root Access Denied"
    fi
 }

printf '%s|%s|%s|%s\n' "$1" "$(host)" "$(protocol)" "$(rootlogin)" >fonk.out    

마지막 줄은 약간 추측에 가깝습니다. 현재 스크립트가 첫 번째 필드를 전혀 인쇄하지 않는 것 같으며 여기에 무엇을 포함해야 하는지 명확하지 않습니다.

이는 더 이상 임시 파일을 사용하지 않지만 시도 중인 한 가지 안티 패턴은 관련 없는 기능에서 임시 파일을 생성하는 것입니다. 임시 파일이 꼭 필요한 경우 별도로 생성한 다음 어디에서나 매개 변수로 사용하는 것이 좋습니다. 좋다

tmp=$(mktemp) || exit
# arrange for temp file to be removed in case of errors or signals, too
trap 'rm -f "$tmp"' EXIT
trap 'exit' ERROR HUP QUIT TRAP TERM

function1 "$tmp"
function2 "$tmp"
: etc

관련 정보