2015-11-27 56 views
-2

我正在研究Linux Ubuntu的數據庫服務。我在用於連接數據庫的GUI終端菜單程序中出現錯誤。數據庫選擇器

代碼:

echo -n "Database Name > " 
read character 
i=0 
while [ $i != -1 ]; do 
    line=awk NR==$i /etc/kittydb/databases.txt 
    if [ $character = $line ]; then 
    echo "Done" 
    break 
    else 
    $i+1; 
    fi 
done 

輸出:

/usr/local/bin/kittydb: 114: [: =: argument expected 
/usr/local/bin/kittydb: 118: /usr/local/bin/kittydb: 0+1: not found 
/usr/local/bin/kittydb: 113: /usr/local/bin/kittydb: /etc/kittydb/databases.txt: Permission denied 

如何解決上面的錯誤?

+0

你的意思是*不工作*?你期望你的代碼做什麼?它現在正在做什麼?請閱讀[問]和[mcve]。 –

+1

請看看:http://www.shellcheck.net/ – Cyrus

+0

更簡潔一點,沒有個人參考。 您可能希望在請求Stack Overflow社區幫助解決手頭問題之前展示合理的努力。 – SwiftArchitect

回答

0

如果需要檢查,如果如果只找到了比賽用的第一次出現在「完成」文件並顯示數據庫名稱:

#!/bin/bash 

echo -n "Database Name > " 
read character 
awk -v cha=$character '$0 == cha {print "Done";exit;}' /etc/kittydb/databases.txt 

你並不需要一個for循環來遍歷通過一個文件。 awk將做到這一點。

+0

'-v cha =「$ character」'可能有點安全; 'IFS =讀取r字符',同樣。 –

+0

...另外,如果我們真的很迂腐,POSIX不會在通過'-n'時指定echo的輸出結果。因此,'printf'%s''數據庫名稱'''有點安全。 (請參閱http://pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html) –