簡體   English   中英

在if語句中使用退出狀態進行Bash腳本編寫

[英]Bash scripting using an exit status in an if statement

可能是一個新手問題,但無論如何,在我介紹linux / unix類的過程中都涉及到bash腳本編寫,並且在我遇到的一個問題中,它要求我編寫腳本,因此如果用戶在文件中搜索的名稱不是t那里將輸出一條消息,提示“ your_input不在目錄中”

它說要使用if語句和退出狀態$?

到目前為止,我已經獲得了輸入部分,但是我不確定如何正確使用$? 如果可能,在if語句中。

#!/bin/bash
name=$1

if [ "$name" = "" ]

   then echo -n "Enter a name to search for: "

        read name

fi

grep -i $name ~uli101/2014c/phonebook

if [ "$?" < "0" ]

   then echo "error"

fi

我得到錯誤:

./phone4:第14行:0:沒有此類文件或目錄

我的問題是:如何使用$? if語句,如果不能,可以解釋一下如何使用$? 在這個問題上?

注意:我確實使用echo $? 看怎么$? 如果grep有效,則給出0;否則,則給出1

其中有兩個錯誤。 您已經看到的是,在[]表達式中, <不是解釋為“小於”,而是解釋為流重定向運算符。 原因是[只是另一個程序( test的別名),所以[ "$?" < "0" ] [ "$?" < "0" ]cat < filename相似。 另一個錯誤是您不想檢查“小於”,而是要檢查“不等於”。 總共:

if [ "$?" < "0" ]

應該

if [ "$?" -ne "0" ]

或者你可以寫

if ! grep "$name" ~uli101/2014c/phonebook

...因為if將返回碼0解釋為true,而其他所有解釋為false。

沒關系,我的一位朋友將我推向正確的方向:

我要做的就是:

    if [ "$?" = "1" ]
       then echo "error"

fi

我幾乎在考慮它,我只需要說一下$? = 1然后出錯,因為在讀數中它表示$? 可以大於1我試圖彌補這一點。

它應該是

if [ "$?" -gt 0 ]

符號'<'是重定向運算符,它不是Python或C-Shell腳本中的所有內容都是命令,包括'if'之后的文本,並且您正在執行名為'['的命令,您可能會發現它位於/ usr / bin / [,並且此命令使用-gt和-lt參數比較數字,而不是特殊的shell運算符'>'和'<'。

您可以這樣重寫此代碼:

if grep -i "$name" ~uli101/2014c/phonebook
  then true # 'true' is also a command, which does nothing and returns success
  else echo "Error"
fi

甚至像這樣,使用'||' 運算符,僅在前一個命令返回錯誤時才執行以下命令:

grep -i "$name" ~uli101/2014c/phonebook || echo "Error"

“ $?” 不需要引號,因為它確實是一個數字。 如果想要更好的腳本,請檢查電話簿文件是否存在,並在詢問名稱輸入是否缺少文件之前退出。 另外,如果您對READ命令沒有任何回應(僅輸入),則可能需要執行某些操作。

#!/bin/bash

name=$1
phonebook=~/phonebook

if [ "$name" = "" ]
  then
  echo -n "Enter a name to search for: "
  read name
fi

grep -i "$name" $phonebook

if [ $? -gt 0 ]
  then
  echo "error, no \"$name\" in $phonebook"
fi

暫無
暫無

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

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