比较SHA-512咸哈希,在执行过程中显示文件名

问题描述 投票:0回答:1

长话短说,我注意到LIST中的"*"以某种方式显示了我正在执行的文件的名称。无论如何,是否让代码显示"*"而不显示文件名?

我仍然是脚本新手,想不出任何办法。请帮助...

#!/bin/bash

LIST='W 2 v * %'
encr="Cd9AjUI4nGglIcP3MByrZUnu.hHBJc7.eR0o/v0A1gu0/6ztFfBxeJgKTzpgoCLptJS2NnliZLZjO40LUseED/"

salt="8899Uidd"
for i in $LIST
  do
   for j in $LIST
    do
    for k in $LIST
     do
      for l in $LIST
        do
        for a in $LIST
            do
            echo -n "$i$j$k$l$a "

   test=`mkpasswd -m SHA-512 $i$j$k$l$a -s $salt`
    if [ $test == $encr ] ; then
            echo " Password is: $i$j$k$l$a"
            exit
        fi
        done
       done
      done
    done
done

#error displaying *

Executed filename displayed

bash sha512
1个回答
2
投票

echo *相同,将球体*扩展为当前目录中的文件名,同样的方式a=*; for i in $a; do echo $i; done将在当前目录中打印路径。您可以在网上的各个地方阅读有关引号和转义的更多信息。

您可以使用bash数组正确引用元素:

LIST=(W 2 v "*" %)
for i in "${LIST[@]}"; do

注意:

  • 不要使用反引号`,不建议使用。请改用$(..)
  • 引用变量扩展名[ "$test" = "$encr" ]以防止受到此类常见错误的侵害。
  • [==是bash扩展名,请使用=可移植。
  • 用于生成元素置换的方法看起来很奇怪,并且无法扩展。考虑编写函数或使用其他方法。甚至(ab-)使用bash扩展名brace expansion echo {W,2,v,"*",%}{W,2,v,"*",%}{W,2,v,"*",%}{W,2,v,"*",%}{W,2,v,"*",%}看起来都较短。
© www.soinside.com 2019 - 2024. All rights reserved.