2014-02-20 46 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}'