gpt4 book ai didi

bash - 我应该如何将我的 bash 脚本缩减为 5 个 for 循环?

转载 作者:行者123 更新时间:2023-12-05 00:50:13 25 4
gpt4 key购买 nike

我正在尝试缩小 bash 脚本,这样它就不必一遍又一遍地重新运行相同的代码。但根据某些人的说法,我可以在 test 处运行该行,一次性处理所有 4 种加密。

帮助我不知道他们是什么意思。
代码戈尔:

#!/bin/bash

LIST1=(K F L W )
LIST2=(8 2 9 2 )
LIST3=(x b s v )
LIST4=("~" "-" "[" "*" )
LIST5=("$" "+" "]" "%" )

encr1=".8742cNKlzqQ8Mgjip/Fg1"
salt1="bCgxj8Yt"
encr2="31HvJ8Iinxk2k"
salt2="31"
encr3="AyPVCzU.ourSwFdL3N6/YP9RRfIwwKZPNrnt0/yn5vB"
salt3="klPjs90j"
encr4="Cd9AjUI4nGglIcP3MByrZUnu.hHBJc7.eR0o/v0A1gu0/6ztFfBxeJgKTzpgoCLptJS2NnliZLZjO40LUseED/"
salt4="8899Uidd"

for i in "${LIST1[@]}"
do
for j in "${LIST2[@]}"
do
for k in "${LIST3[@]}"
do
for l in "${LIST4[@]}"
do
for a in "${LIST5[@]}"
do
test="$(mkpasswd -m MD5 "$i$j$k$l$a" -s $salt1 | cut -d"$" -f4)"
if [ "$test" == "$encr1" ] ; then
echo " MD5 Salted Hash Password is: $i$j$k$l$a"
echo " Salt: "$salt1""

for i in "${LIST1[@]}"
do
for j in "${LIST2[@]}"
do
for k in "${LIST3[@]}"
do
for l in "${LIST4[@]}"
do
for a in "${LIST5[@]}"
do
test="$(mkpasswd -m SHA-256 "$i$j$k$l$a" -s $salt3 | cut -d"$" -f4)"
if [ "$test" == "$encr3" ] ; then
echo " SHA-256 Salted Hash Password is: $i$j$k$l$a"
echo " Salt: "$salt3""
fi
done
done
done
done
done

for i in "${LIST1[@]}"
do
for j in "${LIST2[@]}"
do
for k in "${LIST3[@]}"
do
for l in "${LIST4[@]}"
do
for a in "${LIST5[@]}"
do
test="$(mkpasswd -m SHA-512 "$i$j$k$l$a" -s $salt4 | cut -d"$" -f4)"
if [ "$test" == "$encr4" ] ; then
echo " SHA-512 Salted Hash Password is: $i$j$k$l$a"
echo " Salt: "$salt4""

for i in "${LIST1[@]}"
do
for j in "${LIST2[@]}"
do
for k in "${LIST3[@]}"
do
for l in "${LIST4[@]}"
do
for a in "${LIST5[@]}"
do
test="$(mkpasswd -m des "$i$j$k$l$a" -s $salt2)"
if [ "$test" == "$encr2" ] ; then
echo " DES Salted Hash Password is: $i$j$k$l$a"
echo " Salt: "$salt2""
exit
fi
done
done
done
done
done
fi
done
done
done
done
done


fi
done
done
done
done
done


输出仍然以某种方式显示为我想要的: Output

最佳答案

由于您仅将数组 LIST1 ... LIST5 用于 5×for 构造,因此我会用大括号扩展替换它们。这样你最终只有一个循环。

不是手动列出和检查像 encr1salt1 这样的变量对,而是使用三个数组 encr, salt,和 algo(您之前手动指定的算法)。然后您可以使用循环遍历所有这些三元组,而不必手动编写每个检查。

#! /bin/bash
n=4
encr=(
".8742cNKlzqQ8Mgjip/Fg1"
"31HvJ8Iinxk2k"
"AyPVCzU.ourSwFdL3N6/YP9RRfIwwKZPNrnt0/yn5vB"
"Cd9AjUI4nGglIcP3MByrZUnu.hHBJc7.eR0o/v0A1gu0/6ztFfBxeJgKTzpgoCLptJS2NnliZLZjO40LUseED/"
)
salt=(bCgxj8Yt 31 klPjs90j 8899Uidd)
algo=(MD5 SHA-256 SHA-512 des)
for candidate in {K,F,L,W}{8,2,9}{x,b,s,v}{'~','-','[','*'}{'$','+',']','%'}; do
for (( i = 0; i < n; i++ )); do
test="$(mkpasswd -m "${algo[i]}" "$candidate" -s "${salt[i]}")"
if [ "$test" = "${encr[i]}" ]; then
echo " ${algo[i]} Salted Hash Password is: $candidate"
echo " Salt: ${salt[i]}"
fi
done
done

在这里,我从第二个候选符号中删除了重复的 2。谢谢Gordon Davisson感谢您指出这一点。

顺便说一句:我使用了您原始脚本中的变量名。但是,最好将 hashes 数组命名为 encr 以外的名称。散列和加密不同——就像撕碎一份文件然后从中挑出十 block 不同于将完整的文件锁起来。

关于bash - 我应该如何将我的 bash 脚本缩减为 5 个 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59623381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com