linux bash shell error - error 条件表达式语法错误
linux bash shell error - error syntax error in conditional expression
我不明白这个总是给我的错误,你能帮我吗?
我正在做作业,这真的很重要,我从一大早开始就在想办法解决它
param0="KcgMy4kfBovoomVUcvtkxXqh1xosedAq";
param1="r2UmsEnodjLin2zT94M7eAX76vpB7gTe";
param2=97;
output="";
f=0;
for (( i=0, j=0; i<${#param0}, j<${#param1}; i++, j++ ));
do c0=${param0:$i:1};
c1=${param1:$j:1};
renum="^[0-9]+$";
if [[ $c0 =~ $renum && $c1=~ $renum ]];
then param2=$((param2 - i - (c0 * c1)));
if (( param2 < 1 ));
then param2=$((-1 * param2));
f=$((!f));
fi;
output+=${param2};
else reupper="^[A-Z]+$";
if [[ $f -eq 1 && $c0 =~ $reupper ]];
then output+=${c0};
else output+=${c1}${c0};
fi;
fi;
if [[ $c0 =~ $realpha && $c1 =~ $realpha ]];
then reverse="";
for ((k = ${#output} - 1; k >= 0; k--));
do reverse=${reverse}${output:$k:1};
done;
output=$reverse;
fi;
done;
echo ${output:0:32};
修复了在第二个正则表达式中缺少 space。
不要忘记使用 https://shellcheck.net/ 检查您的脚本或使用文本编辑器将其作为 plug-in。
修复了您的脚本:
#!/usr/bin/env bash
param0="KcgMy4kfBovoomVUcvtkxXqh1xosedAq"
param1="r2UmsEnodjLin2zT94M7eAX76vpB7gTe"
param2=97
output=""
f=0
for ((i = 0, j = 0; i < ${#param0}, j < ${#param1}; i++, j++)); do
c0=${param0:i:1}
c1=${param1:j:1}
renum="^[[:digit:]]+$"
if [[ $c0 =~ $renum && $c1 =~ $renum ]]; then
param2=$((param2 - i - (c0 * c1)))
if ((param2 < 1)); then
param2=$((-1 * param2))
f=$((!f))
fi
output+=${param2}
else
reupper="^[[:upper:]]+$"
if [[ $f -eq 1 && $c0 =~ $reupper ]]; then
output+=${c0}
else
output+=${c1}${c0}
fi
fi
realpha="^[[:alpha:]]+$"
if [[ $c0 =~ $realpha ]] && [[ $c1 =~ $realpha ]]; then
reverse=""
for ((k = ${#output} - 1; k >= 0; k--)); do
reverse=${reverse}${output:k:1}
done
output=$reverse
fi
done
printf %s\n ${output:0:32}
我不明白这个总是给我的错误,你能帮我吗?
我正在做作业,这真的很重要,我从一大早开始就在想办法解决它
param0="KcgMy4kfBovoomVUcvtkxXqh1xosedAq";
param1="r2UmsEnodjLin2zT94M7eAX76vpB7gTe";
param2=97;
output="";
f=0;
for (( i=0, j=0; i<${#param0}, j<${#param1}; i++, j++ ));
do c0=${param0:$i:1};
c1=${param1:$j:1};
renum="^[0-9]+$";
if [[ $c0 =~ $renum && $c1=~ $renum ]];
then param2=$((param2 - i - (c0 * c1)));
if (( param2 < 1 ));
then param2=$((-1 * param2));
f=$((!f));
fi;
output+=${param2};
else reupper="^[A-Z]+$";
if [[ $f -eq 1 && $c0 =~ $reupper ]];
then output+=${c0};
else output+=${c1}${c0};
fi;
fi;
if [[ $c0 =~ $realpha && $c1 =~ $realpha ]];
then reverse="";
for ((k = ${#output} - 1; k >= 0; k--));
do reverse=${reverse}${output:$k:1};
done;
output=$reverse;
fi;
done;
echo ${output:0:32};
修复了在第二个正则表达式中缺少 space。
不要忘记使用 https://shellcheck.net/ 检查您的脚本或使用文本编辑器将其作为 plug-in。
修复了您的脚本:
#!/usr/bin/env bash
param0="KcgMy4kfBovoomVUcvtkxXqh1xosedAq"
param1="r2UmsEnodjLin2zT94M7eAX76vpB7gTe"
param2=97
output=""
f=0
for ((i = 0, j = 0; i < ${#param0}, j < ${#param1}; i++, j++)); do
c0=${param0:i:1}
c1=${param1:j:1}
renum="^[[:digit:]]+$"
if [[ $c0 =~ $renum && $c1 =~ $renum ]]; then
param2=$((param2 - i - (c0 * c1)))
if ((param2 < 1)); then
param2=$((-1 * param2))
f=$((!f))
fi
output+=${param2}
else
reupper="^[[:upper:]]+$"
if [[ $f -eq 1 && $c0 =~ $reupper ]]; then
output+=${c0}
else
output+=${c1}${c0}
fi
fi
realpha="^[[:alpha:]]+$"
if [[ $c0 =~ $realpha ]] && [[ $c1 =~ $realpha ]]; then
reverse=""
for ((k = ${#output} - 1; k >= 0; k--)); do
reverse=${reverse}${output:k:1}
done
output=$reverse
fi
done
printf %s\n ${output:0:32}