複数の関数を使用して1行で出力を取得する

複数の関数を使用して1行で出力を取得する

ホスト名、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    

最後の行は少し推測に近いです。現在、スクリプトが最初のフィールドをまったく印刷していないようで、ここに何を含めるべきかは不明です。

これは一時ファイルを使用しなくなりますが、試みているアンチパターンの1つは、無関係な機能から一時ファイルを生成することです。一時ファイルが必要な場合は、個別に作成してからどこでもパラメータとして使用することをお勧めします。良い

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

関連情報