如果所選文字中出現字串“-----BEGIN PGP MESSAGE-----”,我想解密所選文字。我有以下程式碼,但它沒有顯示任何內容。
#!/bin/bash
xsel > pgp.txt
if [grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt]
then
gnome-terminal --command "gpg -d -o decrypted.txt pgp.txt"
gedit decrypted.txt
fi
當我選擇文字後在終端上運行它時,它說
line 3: [grep: command not found
我是 bash 腳本新手。任何幫助,將不勝感激。
謝謝
答案1
令人困惑的是,[
實際上是一個程序,它也被稱為測試 (1)。您不需要將 grep 命令包含在[
.如果您要使用[
某些內容,則需要用空格字元分隔左括號[ foo == bar ]
if 語法是:help if
if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi
The `if COMMANDS' list is executed. If its exit status is zero, then the
`then COMMANDS' list is executed.
您想要的命令可能更像這樣。
if grep -q -e "-----BEGIN PGP MESSAGE-----" pgp.txt; then
...
...
fi
答案2
[ 後面應該有一個空格。 grep 傳回字串,因此您的測試可能會失敗。您最好檢查 grep 的退出狀態。
grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
exitcode=$?
if [ $exitcode ]
then
# not found
else
# found
fi
答案3
[
是命令,而不是語法。相當於test
命令。
去掉方括號看看是否有效:
#!/bin/bash
xsel > pgp.txt
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
gnome-terminal --command "gpg -d -o decrypted.txt pgp.txt"
gedit decrypted.txt
fi
更新:
在左括號後插入空格在您的情況下也不起作用:
if [ grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt ]
then
因為 bash 將其擴展為:
if test grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt
then
你會得到line 3: [: too many arguments
錯誤。
請記住這[
是一個命令。它需要參數和過程以及退出代碼。
grep
您也可以使用以下方法丟棄標準輸出:
if grep -e "-----BEGIN PGP MESSAGE-----" pgp.txt >/dev/null
then