日付とsha512の合計をファイルに印刷しますか?

日付とsha512の合計をファイルに印刷しますか?

日付とsha512の合計をファイルに印刷したいです。次の構文を使用することをお勧めします<date> : <sha512sum>

コードは次のとおりです。

FILES="
blocklists/blocklist.txt
whitelists/whitelist.txt
"
main() {
    echo "sha512"
    func_sha512sum
    cat sha512.md
}

func_sha512sum() {
    for file in $FILES
    do
        sha512sum $file > temp2
        date > temp3
        temp3 + " : " + temp2 >> sha512.md
    done
}
main
rm temp*

ただし、出力は次のようになります。

sha512
test.sh: 17: temp3: not found
test.sh: 17: temp3: not found

誰もが動作する方法を知っていますか?事前にありがとう

編集:rm temp *がないと、temp2とtemp3の両方が必要な情報で埋められますが、sha512sum.mdに「マージ」されません。

ベストアンサー1

この行は bash 構文には役に立ちません:

temp3 + " : " + temp2 >> sha512.md

これは、「文字列を取得してtemp3コマンドとして実行し、それを+ " : " + temp2引数として渡して出力をファイルに追加するsha512.md」ことを意味します。以下はスクリプトの作業バージョンです。

#! /usr/bin/env bash
FILES="
blocklists/blocklist.txt
whitelists/whitelist.txt
"
main() {
    echo "sha512"
    func_sha512sum
    cat sha512.md
}

func_sha512sum() {
    for file in $FILES
    do
      printf '%s : %s\n' \
            "$(date)" \
            "$(sha512sum -- "$file")"  >> sha512.md
    done
}
main

個人的には、ファイル名のハードコーディングを避けたいと思います。これは、スクリプトを実際に制限するためです。引数からファイルを取得し、stdoutとして印刷します。

#! /usr/bin/env bash

for file in "$@"; do
  printf '%s : %s\n' \
        "$(date)" \
        "$(sha512sum -- "$file")"  
done 

その後、次のように実行できます。

$ foo.sh whitelists/whitelist.txt blocklists/blocklist.txt 
Fri Apr 23 10:11:10 AM BST 2021 : a61788166e55f4fbac36f7c9b5a35b80d79eaee684e247caa1e3985a0b78a0edd2c04cacad017b077250c91ced64894d3ae17204df684e09020d7d2569414c5c  blocklists/blocklist.txt
Fri Apr 23 10:11:10 AM BST 2021 : 6b29fcb04c0c19abda792b6efb41f317d8a6af63daad74c0eb82ac7dee7be88d87242fb36b56c63581f109d8cb50969b519935d23b9c5223af1c69a4e3ac5ef5  whitelists/whitelist.txt

おすすめ記事