在if语句中正确嵌套条件

时间:2019-07-22 22:54:12

标签: bash if-statement nested

我有一组条件很好地工作。但是,我需要调整算法(使其更加复杂),该算法涉及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是否相等,以确保a3c1也相等并且a1c2也相等。如果没有,它将再次重新分配变量a2

我的想法是执行c3类型的逻辑,但这在这里似乎不起作用。我得到:

if (true AND ( true OR true))

所有c和变量都是单个字母数字,因此,在我对此主题的相关SO帖子中看到的带有空格的字符串不是不是问题。

当我尝试使用双括号而不是整个括号时,脚本根本无法运行。括号不起作用,因为这些不是算术运算...所以我现在挠头了。 似乎这是执行嵌套条件的正确方法...我想念什么?

1 个答案:

答案 0 :(得分:3)

方括号看起来像特殊的shell语法,但根本不是。 [只是test的另一个名字,而结尾]只是一个被忽略的参数。

您可以使用花括号,这是 特殊语法:

if [ "$c3" == "$a3" ] && { [ "$c1" != "$a1" ] || [ "$c2" != "$a2" ]; }

括号也有效。不需要多余的;,但它们会创建不必要的子外壳,因此我建议使用花括号:

if [ "$c3" == "$a3" ] && ( [ "$c1" != "$a1" ] || [ "$c2" != "$a2" ] )