簡體   English   中英

KornShell中的測試命令(ksh)

[英]test command in KornShell (ksh)

我對KornShell(ksh)中的測試命令有疑問。 我知道-ne用於比較整數而且!=用於比較字符串。 如果一個參數是一個字符串而另一個是整數,那么測試命令將如何表現? 我的代碼中有以下條件,兩者都正常工作。

碼:

myCount=1
myCount=`expr $myCount+ 0`
temp=`ps -aef | grep damn | wc -l`
if [ $temp -ne $myCount]; then
        echo ERROR Number
fi

if [ $temp != $myCount ]; then
        echo ERROR Strings
fi

輸出:

ERROR Number
ERROR Strings

但無論如何你的代碼都有缺陷。

temp = ps -aef | grep damn | wc -l ps -aef | grep damn | wc -l ps -aef | grep damn | wc -l將始終返回至少1,因為它將找到grep命令以及填充前導空格的字符串,這就是為什么兩個測試都為真。

管道到wc也是不必要的,因為grep的-c開關對你來說很重要。

更好的代碼是:

temp = ps -aef |grep damn |grep -cv grep將返回包含該死的字符串的進程的運行實例數,它將是一個數字。

該類型不相關,因為它是一個簡單的文本替換。 換句話說,變量$temp的值將替換為$temp (例如)。

至少對於我正在運行的ksh版本,對於數值比較,如果值以非數字開頭,則它將等於0.如果它以數字開頭但包含非數字,則會出現錯誤。

例如:

$ export s1=xyz
$ export s2=7xyz
$ export i1=0
$ if [ $i1 -eq $s1 ]
> then
>     echo equal
> fi
equal
$ if [ $i1 -eq $s2 ]
> then
>     echo equal
> fi
ksh: 7xyz: bad number `7xyz'

但是,根據您的評論,對於所有版本的ksh ,情況可能並非如此。

基於此,我將嘗試確保您使用字符串比較進行字符串和數字的數字比較。 其他任何東西都可能是不便攜的。

使用ksh93和GNU coreutils expr 7.4你的命令:

myCount=`expr $myCount+ 0`

給我一個語法錯誤並將myCount設置為null,這導致兩個if語句輸出“ksh:[:argument expected”錯誤。 嘗試在加號前加一個空格。 此外,之前需要有一個空間]

您不需要將myCounttemp轉換為整數。 使用expr強制myCount是完全沒有必要的。

我更喜歡這種形式來比較整數,因為它允許你使用符號比較運算符,如!=>而不是-ne-gt

if (( $temp != $myCount ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM