我有一组条件很好地工作。但是,我需要调整算法(使其更加复杂),该算法涉及bash中的嵌套条件。
例如,这是一个这样的块:
def click(x,y):
win32api.SetCursorPos((x,y))
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
time.sleep(30 / 1000)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
最里面的if语句实质上检查a1=C
a2=P
a3=E
a4=1
a5=7
a6=0
a7=4
a8=T
a9=K
a10=S
letters=$(echo {A..Z} | tr -d ' ')
if [ "$c3" != "$a3" ]
then
c3=${letters:$((RANDOM%26+1)):1}
if [ "$c3" == "$a3" ] && (( $count % $difficulty3 != 0 ))
then
c3=${letters:$((RANDOM%26+1)):1}
if [ "$c3" == "$a3" ] && [ [ "$c1" != "$a1" ] || [ "$c2" != "$a2" ] ]
then
c3=${letters:$((RANDOM%26+1)):1}
fi
fi
fi
和c3
是否相等,以确保a3
和c1
也相等并且a1
和c2
也相等。如果没有,它将再次重新分配变量a2
。
我的想法是执行c3
类型的逻辑,但这在这里似乎不起作用。我得到:
if (true AND ( true OR true))
所有c和变量都是单个字母或数字,因此,在我对此主题的相关SO帖子中看到的带有空格的字符串不是不是问题。
当我尝试使用双括号而不是整个括号时,脚本根本无法运行。括号不起作用,因为这些不是算术运算...所以我现在挠头了。 似乎这是执行嵌套条件的正确方法...我想念什么?
答案 0 :(得分:3)
方括号看起来像特殊的shell语法,但根本不是。 [
只是test
的另一个名字,而结尾]
只是一个被忽略的参数。
您可以使用花括号,这是 特殊语法:
if [ "$c3" == "$a3" ] && { [ "$c1" != "$a1" ] || [ "$c2" != "$a2" ]; }
括号也有效。不需要多余的;
,但它们会创建不必要的子外壳,因此我建议使用花括号:
if [ "$c3" == "$a3" ] && ( [ "$c1" != "$a1" ] || [ "$c2" != "$a2" ] )