我有一个为游戏编写的简单脚本。该脚本从游戏用户主目录中的〜/ .profile中调用,并且应该模拟成功登录两个变量后运行另一个脚本的假登录。它工作了一段时间,然后突然停止工作。 (编辑:当我说它停止工作时,我并不是说我改变了一些东西,使一切搞砸了,我的意思是它在整夜不触摸后就停止了工作。)
#!/bin/bash
pause(){
read -p "Place [CARD] on scanner and press [ENTER] key..."
}
init(){
cat /etc/issue
pause
READ=`sudo ~/bin/Read.py`
CARD=`cat ~/var/keycode.txt`
if [ "$READ" == "$CARD" ]; then
~/bin/mmenu.sh
else
echo "Incorrect... Please try again"
fi
}
while true
do
init
done
我在做什么错? 预先感谢。
编辑: Read.py的输出为12345,cat keycode.txt的输出为12345 但是,似乎无法让他们正确比较。
该脚本已被精简,无法打印Read.py,仅将其内容写入名为rcard.txt的文件中,并且两个变量均如下所示:
CARD=`cat ~/var/kcard.txt`
READ=`cat ~/var/rcard.txt`
尽我所能尝试,即使使用[“ $ READ” ==“ $ CARD”],它仍然会失败if语句。即使内容完全相同。 我真的不明白。
答案 0 :(得分:0)
这里有一些可能的错误源,这取决于您的错误消息是什么(如果您得到的是错误消息)。 sudo ~/bin/Read.py
可能返回多个文本单词,并用空格分隔,这将导致如下错误:
$ foo=hello world
$ bash: world: command not found
cat ~/var/keycode.txt
也可能发生相同的错误。为了避免这种潜在的错误,即使这不是您收到的错误,我也会用反引号将您的反引号引起来,如下所示:
READ="`sudo ~/bin/Read.py`"
CARD="`cat ~/var/keycode.txt`"
如果没有收到错误消息,但是当您输入正确的内容后代码无法正常工作,我将检查文件~/bin/Read.py
和~/var/keycode.txt
,看看是否可以确定问题所在在那里-两者之一可能发生不一致,导致未捕获的错误。
如果您可以提供有关程序如何“突然停止工作”的更多说明,那将很有用。
答案 1 :(得分:0)
我认为它仍然会在else语句中循环,因为有几行要比较,而且这样行也不行。另外,您的分配可能会一次加入一些行。
您可以通过以下方式替换if语句:
if [ $( sudo ~/bin/Read.py |grep -wc "$CARD" ) -ge 1 ]; then
此带有-c选项的 grep 指令将以数学方式返回您执行 Read.py 返回的行数,并返回“ $ CARD”中的行数。因此,如果至少有一行匹配,则可以根据需要在 then 语句中循环。