2012-07-20 66 views
2

我已經寫了一個小文件,我用它來取文件的名字。shell腳本報價

#objectname 
echo "objectname" 
read ON 

不能變得更簡單。

我對我得到的文件做了一些處理。

gpg -c --no-use-agent "$ON" 

例如,如果我有一個文件a.exe - >將對其進行加密,並給我一個文件有不同的MD5和擴展。現在,文件看起來是這樣的a.exe.gpg

現在,如果我給它一個綁定文件的名稱直接。

像這樣的例子: 來自這個link

# This works 
fileName='a.exe.gpg' 
md5sum=$(md5sum ${fileName}) 
echo $md5sum 

它正常返回。

如果我想動態地做它會怎樣。

這是我的嘗試:

#does not work 
gpg -c --no-use-agent "$ON" 
fileName= `$ON.gpg` 
md5sum= $(md5sum ${fileName}) 
echo $md5sum 

我在這裏得到這個錯誤:upload.sh: 1: upload.sh: Fire.exe.gpg: not found,程序不會退出。

請問我在做什麼錯誤?

回答

3

的錯誤是在這裏:

fileName= `$ON.gpg` 
  1. 應該有=後沒有空間。 (也請看下一行。)
  2. 您使用的是反引號,其中執行$ON.gpg而不是簡單評估它。反引號與$(...)相同,但不太優雅。爲此使用雙引號。

閱讀Greg's wiki entry on quotes對於一個超級詳細的解釋和評論性的評論。 :-)

+0

非常感謝那個鏈接! – user1524529 2012-07-20 00:56:09

+0

我的榮幸。整個維基是迷人的,極具教育意義。它由FreeNode上的#bash頻道經常出現的人維護。如果你去那裏,準備受到侮辱*和*受過教育。 :-) – ghoti 2012-07-20 01:00:03

1

你瘋狂修復文件名。

fileName="$ON.gpg" 
+0

我很抱歉,我現在有一個不同的錯誤: 'upload.sh:48:upload.sh:96b2edbf09638837d4c2feadb3d3bb3e:不found' – user1524529 2012-07-20 00:51:53

+0

我現在發現我的錯誤:)。 間距誤差! – user1524529 2012-07-20 00:55:35

2

在shell腳本中進行賦值時要小心。請勿在operator=的任何一側使用空格。請嘗試以下操作:

fileName="$ON.gpg" 
md5sum=$(md5sum ${fileName}) 

注意變量和分配operator=是沒有空間在一起。

此外,當您使用反引號作爲`expression`時,它將像shell使用$(expression)那樣執行,正如用戶ghoti指出的那樣。