2014-02-20 72 views
2

我有(STDIN)刪除(STDIN)=標籤在BASH

我寫以下bash腳本來計算格式化準備用於複印的字符串,並以大寫輸出它的SHA1哈希一個問題以plist文件爲例。

這裏是腳本: -

#!/bin/bash   

echo 'Enter String :-';  

read temp_var1;           #Read string 

hash=$(echo -n $temp_var1 | openssl sha1);    #Copy hash into variable $hash 

uphash=$(echo $hash | tr '[:lower:]' '[:upper:]';);  #Convert hash to Upper-case 

echo 'Below is the UPPERCASE SHA1 Hash of your string'; 

echo ' </yourHash>'$uphash'</yourHash>';    #Echo formatted string 

這整個腳本工作分得很開的一個關鍵問題。 輸出不是我想要的。 例如具有

Hello, World! 

輸入我想要得到以下的輸出: -

Below is the UPPERCASE SHA1 Hash of your string 
</yourHash>0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash> 

,而不是我所得到的是這樣的: -

Below is the UPPERCASE SHA1 Hash of your string 
</yourHash>(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01</yourHash> 

我的問題是。我如何刪除這個(STDIN)=標籤和它後面的空格?

非常感謝您提供任何幫助。

MIRAGE

回答

2

可以使用參數替代像這樣剝離它關閉前:

a="(STDIN)= 0A0A9F2A6772942557AB5355D76AF442F8F65E01" 
b=${a#*= } # Strip up to "=" sign 
echo $b 
0A0A9F2A6772942557AB5355D76AF442F8F65E01 

我懷疑有一個選項OpenSSL的停止它生成「(STDIN)」的一部分,但我不這樣做。

如果您想了解更多關於這種事情,看看here.

+1

可能會矯枉過正,但是當使用二進制標誌時,它不會輸出「(STDIN)」部分。之後您將不得不將其轉換爲十六進制。如: 'echo -n $ temp_var1 | openssl sha1 -binary | xxd -p「 – Timmah

0

可能不是最好的解決辦法,但你可以使用awk來選擇第二列。像這樣:

echo -n $temp_var1 | openssl sha1 | awk '{print $2}'