从shell脚本中,我正在执行python程序。我试图将python的返回值分配给shell脚本中的变量,并在if else条件下比较此变量。我不知道我在代码或语法上哪里犯了错误。请帮助我获得正确的输出。
test.sh
#!bin/sh
#!/usr/bin/python2.7
password="Testing@2134testing"
password_check=$(python password.py $password)
if [ "$password_check" == "True" ];then
echo "Correct"
else
echo "Incorrect"
fi
password.py
import re, sys
password = sys.argv[1]
def passwordCheck():
if re.match(r'(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}', password):
return True;
else:
return False;
即使密码符合要求,也始终显示不正确。
答案 0 :(得分:0)
运行此命令时:
password_check=$(python password.py $password)
您正在将password.py
程序的输出分配给password_check
变量。问题是您的password.py
程序不会产生任何输出:实际上,它甚至不会运行passwordCheck
函数,因为您的Python脚本从不调用passwordCheck
。按照您尝试使用脚本的方式进行工作,您需要将其修改为(a)实际调用passwordCheck
方法和(b)打印输出,而不是return
赋值:
import re, sys
password = sys.argv[1]
def passwordCheck():
if re.match(r'(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[^A-Za-z0-9]).{14,}', password):
print 'okay'
return True
else:
print 'fail'
return False
passwordCheck()
然后在您的shell脚本中检查该值:
#!bin/sh
password="Testing@2134testing"
password_check=$(python password.py $password)
if [ "$password_check" == "okay" ];then
echo "Correct"
else
echo "Incorrect"
fi
请注意,Python不需要在线的终端;
,因此,
的:
return False;
您应该写:
return False
此外,在此示例中,我们使用脚本的 output 确定成功/失败。一个更强大的解决方案是 请使用脚本的退出代码。您可能会找到一个 如果您在网上探索了使用此技术的各种示例, 位。