Bash 为什么我的摩尔斯电码转换器没有显示输出?
我想做一个摩尔斯电码转换器,它可以将txt文件中的字母转换为摩尔斯电码,将txt文件中的摩尔斯电码转换为字母 执行方式为编码的Bash 为什么我的摩尔斯电码转换器没有显示输出?,bash,shell,unix,morse-code,Bash,Shell,Unix,Morse Code,我想做一个摩尔斯电码转换器,它可以将txt文件中的字母转换为摩尔斯电码,将txt文件中的摩尔斯电码转换为字母 执行方式为编码的/morse.sh-e Text.txt,解码的/morse.sh-d morse_Text.txt。我唯一的问题是,由于某种原因,输出没有显示在屏幕上 这是代码。如果我犯了错误,请告诉我 #!/bin/bash echo "Hello,welcome to the Morse Code Converter!!" encode(){ declare -A mo
/morse.sh-e Text.txt
,解码的/morse.sh-d morse_Text.txt
。我唯一的问题是,由于某种原因,输出没有显示在屏幕上
这是代码。如果我犯了错误,请告诉我
#!/bin/bash
echo "Hello,welcome to the Morse Code Converter!!"
encode(){
declare -A morse
morse[A]=".-";
morse[B]="-...";
morse[C]="-.-.";
morse[D]="-..";
morse[E]=".";
morse[F]="..-.";
morse[G]="--.";
morse[H]="....";
morse[I]="..";
morse[J]=".---";
morse[K]="-.-";
morse[L]=".-..";
morse[M]="--";
morse[N]="-.";
morse[O]="---";
morse[P]=".--.";
morse[Q]="--.-";
morse[R]=".-.";
morse[S]="...";
morse[T]="-";
morse[U]="..-";
morse[V]="...-";
morse[W]=".--";
morse[X]="-..-";
morse[Y]="-.--";
morse[Z]="--..";
morse[1]=".----";
morse[2]="..---";
morse[3]="...--";
morse[4]="....-";
morse[5]=".....";
morse[6]="-....";
morse[7]="--...";
morse[8]="---..";
morse[9]="----.";
morse[0]="-----";
for (( k = 0; k < ${#morse}; k=k + 1 )); do
echo "${morse}"
done
}
decode(){
declare -A letter
letter[.-]="A";
letter[-...]="B";
letter[-.-.]="C";
letter[-..]="D";
letter[.]="E";
letter[..-.]="F";
letter[--.]="G";
letter[....]="H";
letter[..]="I";
letter[.---]="J";
letter[-.-]="K";
letter[.-..]="L";
letter[--]="M";
letter[-.]="N";
letter[---]="O";
letter[.--.]="P";
letter[--.-]="Q";
letter[.-.]="R";
letter[...]="S";
letter[-]="T";
letter[..-]="U";
letter[...-]="V";
letter[.--]="W";
letter[-..-]="X";
letter[-.--]="Y";
letter[--..]="Z";
letter[-----]="0";
letter[.----]="1";
letter[..---]="2";
letter[...--]="3";
letter[....-]="4";
letter[.....]="5";
letter[-....]="6";
letter[--...]="7";
letter[---..]="8";
letter[----.]="9";
for (( i = 0; i < ${#morse}; i=i + 1 )); do
echo "${letter:i}"
done
}
if [[ $1 = "-e" ]]; then
while IFS= read -r line || [[ -n "$line" ]] ; do
echo "The text is : $line"
echo "Morse code is:"
done < "$2"
encode "$@"
elif [[ $1 = "-d" ]]; then
while IFS= read -r line1 || [[ -n "$line1" ]] ; do
echo "The Morse code is : $line1"
echo "The translation is:"
done < "$2"
decode "$@"
else
echo "Please try again using -e or -d"
fi
#/bin/bash
回声“你好,欢迎使用莫尔斯电码转换器!!”
编码(){
申报-摩尔斯电码
莫尔斯[A]=“-”;
莫尔斯[B]=“-…”;
莫尔斯[C]=“-。-”;
莫尔斯[D]=“-…”;
莫尔斯[E]=“;
莫尔斯[F]=“.-”;
莫尔斯[G]=“-”;
莫尔斯[H]=“…”;
摩尔斯[I]=”;
莫尔斯[J]=“----”;
莫尔斯[K]=“-.-”;
莫尔斯[L]=“-…”;
莫尔斯[M]=“-”;
莫尔斯[N]=“-”;
莫尔斯[O]=“--”;
莫尔斯[P]=“-”;
莫尔斯[Q]=“--.-”;
莫尔斯[R]=“-”;
摩尔斯电码=“…”;
莫尔斯[T]=“-”;
莫尔斯[U]=“.-”;
莫尔斯[V]=“…-”;
莫尔斯[W]=“--”;
莫尔斯[X]=“-…-”;
莫尔斯[Y]=“-.-”;
莫尔斯[Z]=“--…”;
莫尔斯[1]=“----”;
莫尔斯[2]=”。--“;
莫尔斯[3]=“…”;
莫尔斯[4]=“…-”;
莫尔斯[5]=“…”;
莫尔斯[6]=“-……”;
莫尔斯[7]=“-…”;
莫尔斯[8]=“--…”;
莫尔斯[9]=“----”;
莫尔斯[0]=“----”;
对于((k=0;k<${morse};k=k+1)),do
回声“${morse}”
完成
}
解码(){
声明-一封信
字母[.-]=“A”;
字母[-…]=“B”;
字母[-.-.]=“C”;
字母[-..]=“D”;
字母[.]=“E”;
字母[…-.]=“F”;
字母[-.]=“G”;
字母[…]=“H”;
字母[…]=“I”;
字母[.--]=“J”;
字母[-.-]=“K”;
字母[.-…]=“L”;
字母[--]=“M”;
字母[-.]=“N”;
字母[--]=“O”;
字母[.-.]=“P”;
字母[-.-]=“Q”;
字母[.-.]=“R”;
字母[…]=“S”;
字母[-]=“T”;
字母[…-]=“U”;
字母[…-]=“V”;
字母[.-]=“W”;
字母[-..-]=“X”;
字母[-.-]=“Y”;
字母[--…]=“Z”;
字母[----]=“0”;
字母[.---]=“1”;
字母[…---]=“2”;
字母[…--]=“3”;
字母[……-]=“4”;
字母[…]=“5”;
字母[-..]=“6”;
字母[…]=“7”;
字母[--…]=“8”;
字母[---.]=“9”;
对于((i=0;i<${morse};i=i+1)),do
回音“${字母:i}”
完成
}
如果[$1=“-e”];然后
而IFS=read-r行| |[[-n“$line”]];做
echo“文本为:$line”
回声“摩尔斯电码是:
完成<“$2”
编码“$@”
elif[$1=“-d”];然后
而IFS=read-r line1 | |[[-n“$line1]”;做
echo“摩尔斯电码是:$line1”
echo“翻译为:
完成<“$2”
解码“$@”
其他的
echo“请使用-e或-d重试”
fi
我可以立即看到一些东西:您使用莫尔斯
作为持有$3
的变量和关联数组echo$($3)
正在尝试将$3
的内容作为命令运行;调用函数时,函数会获得自己的位置参数,因此$3
将不是您在函数中所期望的;你应该引用更多的参数展开式,函数中的逻辑似乎是反向的。完成后的所有事情都没有任何效果。我们要求一个问题包含一个——描述特定问题的尽可能短的代码。不要把你的整个程序都扔进一个问题中——找出它失败的具体地方,并编写尽可能短的脚本来演示同样的问题……如果你想更好地找出某个程序失败的地方和原因,让你编写这个复制程序,可以使用PS4=':${LINENO}+'bash-x yourscript
运行脚本时,它执行的每个命令都会被记录下来,这样您就可以准确地跟踪它的实际行为第一次开始偏离预期的地方。