第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在shell if語句中表示多個條件?

如何在shell if語句中表示多個條件?

PIPIONE 2020-02-04 15:14:08
我想代表多個條件,例如:if [ ( $g -eq 1 -a "$c" = "123" ) -o ( $g -eq 2 -a "$c" = "456" ) ]   then      echo abc;  else      echo efg;   fi  但是當我執(zhí)行腳本時,它顯示syntax error at line 15: `[' unexpected, 第15行顯示的是....這種情況怎么了?我猜這是有問題的()。
查看完整描述

3 回答

?
叮當貓咪

TA貢獻1776條經(jīng)驗 獲得超12個贊

經(jīng)典技術(轉(zhuǎn)義元字符):


if [ \( "$g" -eq 1 -a "$c" = "123" \) -o \( "$g" -eq 2 -a "$c" = "456" \) ]

then echo abc

else echo efg

fi

我已經(jīng)$g用雙引號將引用括起來;一般來說,這是一個好習慣。嚴格來說,并不需要括號,因為的優(yōu)先級-a,并-o使得它糾正,甚至沒有他們。


請注意,-aand -o運算符是testaka 的POSIX規(guī)范的一部分[,主要是為了向后兼容(例如,因為它們是test7th Edition UNIX 的一部分),但是POSIX將它們明確標記為“過時”。Bash(請參閱條件表達式)似乎搶先了經(jīng)典和POSIX的含義,-a并-o帶有自己的接受參數(shù)的替代運算符。


一定要小心,您可以使用更現(xiàn)代的[[運算符,但是請注意,例如Bash和Korn Shell中的版本不必相同。


for g in 1 2 3

do

    for c in 123 456 789

    do

        if [[ ( "$g" -eq 1 && "$c" = "123" ) || ( "$g" -eq 2 && "$c" = "456" ) ]]

        then echo "g = $g; c = $c; true"

        else echo "g = $g; c = $c; false"

        fi

    done

done

在Mac OS X上使用Bash 3.2.57運行示例:


g = 1; c = 123; true

g = 1; c = 456; false

g = 1; c = 789; false

g = 2; c = 123; false

g = 2; c = 456; true

g = 2; c = 789; false

g = 3; c = 123; false

g = 3; c = 456; false

g = 3; c = 789; false

您不需要像使用引號一樣引用變量[[,[因為它不是以相同的方式[是單獨的命令。


這不是一個經(jīng)典的問題嗎?


我會這么想的。但是,還有另一種選擇,即:


if [ "$g" -eq 1 -a "$c" = "123" ] || [ "$g" -eq 2 -a "$c" = "456" ]

then echo abc

else echo efg

fi

的確,如果您閱讀了該autoconf工具或相關軟件包的“便攜式外殼”指南,則建議使用“ ||”和“ &&” 這種符號。我想您甚至可以做到:


if [ "$g" -eq 1 ] && [ "$c" = "123" ]

then echo abc

elif [ "$g" -eq 2 ] && [ "$c" = "456" ]

then echo abc

else echo efg

fi

在動作像回聲一樣瑣碎的情況下,這還不錯。當要重復的動作塊為多行時,重復會很痛苦,并且較早的版本之一是可取的-否則您需要將動作包裝到在不同then塊中調(diào)用的函數(shù)中。


查看完整回答
1 反對 回復 2020-02-04
?
瀟湘沐

TA貢獻1816條經(jīng)驗 獲得超6個贊

在Bash中:


if [[ ( $g == 1 && $c == 123 ) || ( $g == 2 && $c == 456 ) ]]


查看完整回答
1 反對 回復 2020-02-04
?
守著星空守著你

TA貢獻1799條經(jīng)驗 獲得超8個贊

使用/bin/bash以下方法將起作用:


if [ "$option" = "Y" ] || [ "$option" = "y" ]; then

    echo "Entered $option"

fi


查看完整回答
1 反對 回復 2020-02-04
  • 3 回答
  • 0 關注
  • 6546 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號