Shu*_*wal 4 command-line bash scripts
我的输入文件 ( SerialNos.csv
)中有多行,如下所示:
4TF16B7GA129E
4TF16B7GA129S
4TF16B7GA129D
4TF16B7GA129X
Run Code Online (Sandbox Code Playgroud)
我想读取每一行,计算校验和,并将结果写入另一个文件,但我的输出文件Token.csv
只有一个输出行。我如何处理每一行?
我的代码:
epoch=$(date -d "`date`" +"%s")
StringCsv="/home/Desktop/TokenGenScript/SerialNos.csv"
StringToken=b5242a2d7973c1aca3723c834ba0d239
while IFS=$'\n' read -r line || [ -n "$line" ]
do
j=$line
serial=${j}:${epoch}:${StringToken}
echo "$serial"|sha256sum > Token.csv
done < "$StringCsv"
Run Code Online (Sandbox Code Playgroud)
您正在使用以下命令循环写入文件:
echo "$serial"|sha256sum > Token.csv
Run Code Online (Sandbox Code Playgroud)
但是,每次循环时,您都会擦除文件并写入新条目。您想要做的是每次使用此命令循环时追加(添加到)文件:
echo "$serial"|sha256sum >> Token.csv
Run Code Online (Sandbox Code Playgroud)
single>
告诉 bash 擦除文件Token.csv
并写入内容。double>>
告诉 bash 添加到文件的末尾。
bash 脚本现在看起来像这样:
#!/bin/bash
epoch=$(date -d "`date`" +"%s")
StringCsv="/home/Desktop/TokenGenScript/SerialNos.csv"
StringToken=b5242a2d7973c1aca3723c834ba0d239
> Token.csv # Empty file from last run
while IFS=$'\n' read -r line || [ -n "$line" ]
do
j=$line
serial=${j}:${epoch}:${StringToken}
echo "$serial"|sha256sum >> Token.csv # Append new record to end
done < "$StringCsv"
Run Code Online (Sandbox Code Playgroud)
有两种方法可以创建> Token.csv
上面使用的新空文件和touch Token.csv
. 但是只会> Token.csv
清空现有文件。看:
将输出重定向放在整个循环中,而不仅仅是sha256sum
命令。每次重定向时,都是从头开始重新创建输出文件。这只会创建一次,并在循环中重复写入。
while IFS=$'\n' read -r line || [ -n "$line" ]
do
j=$line
serial=${j}:${epoch}:${StringToken}
echo "$serial"|sha256sum
done < "$StringCsv" > Token.csv
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2610 次 |
最近记录: |