#!/bin/bash
commonguess(){
for guess in $(cat passwordlist)
do
try=$(echo "$guess" | sha256sum | awk '{print $1}' )
if [ "$try" == "$xxx" ]
then
echo "$name:$try"
break
fi
done
}
dict(){...}
brute(){...}
while IFS=':' read -r name hashing;do
commonguess
dict
brute
done
我测试了所有3个功能,它们工作得很好。唯一的问题在底部。
a:123
b:234
c:111
例如,我有一个名为"user"的文件。如果我用这个文件运行我的代码,我的代码将通过3个函数测试a(123)的值,即使它在第一个函数中找到答案。我不想那样做,我想做一些事情,比如测试值,如果在function1中没有找到,然后移动到下一个函数,如果找到答案,然后移动到下一个值
将commonguess中的break替换为"return 0",在函数末尾添加"return 1",对其他函数执行相同操作,并将while循环更改为:
while IFS=':' read -r name hashing;do
commonguess || dict || brute
done
关于bash条件短路计算的更多信息在这里:http://wresch.github.io/2014/04/24/bash-short-circuit-evaluation.html