根據@賽勒斯的評論,我通過http://shellcheck.net運行您的代碼。這裏的結果:
#!/usr/bin/bash
echo -n "Enter filename: "
read -r fileToFind
if [ -z "$fileToFind" ]
then
echo "Error! No filename entered"
else
fileSearch=$(locate -i "$fileToFind")
if [ "$fileSearch" ]
then
echo "$fileSearch"
else
echo "No such file"
fi
fi
注重語法高亮此網頁上。你的代碼中有很多紅色/洋紅色。這表明你還沒有在某個地方關閉報價。
現在你的問題:
我想實現一個if語句,如果任何文件 使用該名稱,發現返回true,它打印到命令行...
以下是您可能感興趣的樣式:如果執行的命令返回0退出代碼(即成功返回),則if語句將評估爲true。在查找的情況下(根據我在https://linux.die.net/man/1/locate的廣泛研究),找到返回文件時調用成功。 locate也會將結果輸出到命令行(或者linux中的stdout)。用
# other code omitted for focus/brevity
if
! locate -i "$fileToFind"
then
echo "No such file"
fi
在這種情況下,我已經否定了結果:所有的說,你可以重新寫你的,如果這樣的說法!所以,如果找不到文件,程序會輸出「No such file」。如果找到找到該文件,找到將只輸出它到標準輸出。
有寫這個代碼的一個稍微更簡潔的方式:
locate -i "$fileToFind" || echo "No such file"
在上面的語句中,你所要求的bash評估邏輯或||具有短路邏輯。一旦表達式爲真,bash將停止執行語句。所以,在上面的例子中,如果locate成功並找到一個文件,bash將不會在||之後執行正確的表達式。這是一個很有趣的簡潔習語,但對其他人來說可能會更難理解。if語句通常更清楚地表達你的邏輯,並且它很好地遵守if。
請看看:http://www.shellcheck.net/ – Cyrus