are*_*naq 0 unix bash shell char xor
我需要对两个字符执行XOR。我得到了这个功能,但是它不会打印出我期望的:
#!/bin/sh
xor() {
key=$1
length=${#key}
while read -r -N1 byte
do
char=${key:$((i % length)):1}
echo $((byte ^ char))
done
}
echo "5555" | xor "4567"
Run Code Online (Sandbox Code Playgroud)
输出:
1
1
1
1
4
Run Code Online (Sandbox Code Playgroud)
我希望带有掩码4567的输入5555能够看到输出:
1
0
3
2
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑:所以我改变了我的功能:
xor() {
key=$1
length=${#key}
i=0
while read -r -N1 byte
do
char=${key:$((i % length)):1}
((i++))
echo $((byte ^ char))
done
}
Run Code Online (Sandbox Code Playgroud)
尝试致电时仍然出现错误:
cat $2 | xor $1
Run Code Online (Sandbox Code Playgroud)
// $ 1是键,$ 2是文件名
作为文件,我使用标准文本文件,并使用字符串作为键。它说在行echo $((byte ^ char))< 上有错误:语法错误:期望操作数(错误的标记是“ <”)
您不会移至中的下一个字符key。((i++))在循环末尾添加:
xor() {
key=$1
length=${#key}
while read -r -N1 byte
do
char=${key:$((i % length)):1}
((i++))
echo $((byte ^ char))
done
}
echo -n "5555" | xor "4567"
Run Code Online (Sandbox Code Playgroud)
echo会发送您可能不需要的换行符。因此,请跳过-n。我认为,通过两个论点会更清洁。
我也建议不要使用/bin/shshebang,因为该脚本实际上是bash。/bin/sh可能链接到不同系统上的不同外壳。它并不总是安全的。始终使用适当的shebang。