2013-12-10 60 views
0

我已經看着從這個網站,手冊頁和谷歌閱讀文件,但不理解,我很抱歉,如果這已被回答。我無法將文件讀入我的腳本。我在linux中使用bash shell。我也是linux新手。不是一個有效的標識符錯誤與讀取命令

我有一個腳本,應該從文本文件中讀取,對每個指定的數據行執行測試,計算等。

我收到以下錯誤:./hw-script7b:第8行:讀:`hw7.list3':不是有效的標識符 hw7.list3是輸入文件。它具有完整的權限(讀,寫,甚至執行)hw-script7b是我的腳本。

該文本文件包含一個目錄的-ls列表。這可能是一個基本問題,但我迷路了。 感謝的任何援助,

黛比

這裏是腳本。

echo "start" 
count=0  #counting all files 
xcount=0 #counting executeable files 
total=0  #counting total space used 
temp=0  #holding place for file being checked 

exec 9< $1 
while read $1 $2 $3 $4 $5 $6 $7 $8 0<&9 
do 
count='expr $count + 1' 
if [ $4 > "$temp" ] 
then 
lfname="$8" 
linode="$1" 
lsize="$4" 
lrights="$2" 
lmonth="$5" 
lday="$6" 
temp="$4" 
else 
if [ $4 < "$temp" ] 
then 
sfname="$8" 
sinode="$1" 
ssize="$4" 
srights="$2" 
smonth="$5" 
sday="$6" 
temp="$4" 
fi 
fi 

#looking for executeable files 
if [ -x "$8" ] 
then 
xcount='expr $xcount + 1' 
fi 
done 

echo "The largest file is: "$lfile"" 
echo "  Inode Size Rights  Date  " 
echo "  $linode $lsize $lrights $lmonth $lday" 
echo 
echo 
echo "The smallest file is: "$sfile"" 
echo "  Inode Size Rights  Date  " 
echo "  $sinode $ssize $srights $smonth $sday" 
echo 
echo 
echo "The total number of files is "$count" and they use "$total" bytes." 
echo 
echo 
echo "There are "$xcount" executable files." 
exit 0 


sample of input file: hw7.list3 
934250 -rwxrwxr-x 1 1107 Dec 2 18:48 //home/others/professor/class-share/hw7.howard 
7934314 -r-xr-xr-t 1 1232 Dec 2 18:48 //home/others/professor/class-share/Matts_HW6 
7934139 -rwxrwxr-x 1 1232 Dec 4 20:08 //home/others/professor/class-share/Matts_HW6_2 
7934366 -rwxrw-r-- 1 1537 Dec 9 19:32 //home/others/professor/class-share/bs-hw7 
7934364 -rwx------ 1 965 Dec 9 19:48 //home/others/professor/class-share/hw7 
7948204 -rwxr-xr-x 1 107 Nov 12 07:47 readtest1 
7948209 -rwxr-xr-x 1 107 Nov 12 07:48 readtest1a 
7948205 -rwxr-xr-x 1 140 Nov 12 07:48 readtest2 
7948206 -rwxr-xr-x 1 160 Nov 12 07:48 readtest3 
7948207 -rwxr-xr-x 1 165 Nov 12 07:48 readtest4 
7948208 -rwxr-xr-x 1 211 Nov 12 07:48 readtest5 
7948210 -rwxr-xr-x 1 8 Nov 12 07:49 namefile1 
7948211 -rwxr-xr-x 1 17 Nov 12 07:49 namefile2 
7948212 -rwxr-xr-x 1 28 Nov 12 07:49 namefile3 
7932451 -rwxr--r-- 1 219 Nov 13 16:53 //home/others/professor/class-share/grades-text 
7934113 -rw-r--r-- 1 111 Nov 18 17:27 //home/others/professor/class-share/test2.gz 
+0

我不確定我們是否可以發佈腳本。我發佈了。我正在閱讀的文件是一個目錄的ls -il文本文件。我把它叫做hw7.list3,但是下面的評論提到這個點可能會導致問題,所以我把它重命名爲hw7list3。現在我沒有得到錯誤,但沒有輸出。研究更多。 – debster

+0

您是否假設'read foo'會從名爲'foo'的文件中讀取?它不會;它從標準輸入(通常是鍵盤)讀入一個名爲'$ foo'的*變量*。使用與文件同名的變量沒什麼意義。你想做什麼? –

+0

我們剛剛瞭解到,您可以重定向stdin以從文件而不是鍵盤獲取信息。我們需要使用這個文件,並找到最大的文件,最小的文件,並計算使用的空間和文件數量。還有其他一些事情我們也需要做。我似乎無法將文件讀入變量,儘管我似乎已將它設置爲類中的示例。 – debster

回答

1

這裏是一個應該讓你開始一個例子:

#!/bin/bash 
echo "start" 
count=0  #counting all files 
xcount=0 #counting executeable files 
total=0  #counting total space used 
temp=0  #holding place for file being checked 


while read linode lrights dummy lsize lmonth lday dummy lfname ; 
do 
((count ++)) 
((total += lsize)) 
[[ "$lrights" == *x* ]] && ((xcount ++)) 
done < $1 


echo "The total number of files is "$count" and they use "$total" bytes." 
echo 
echo "There are "$xcount" executable files." 

我命名腳本t.sh

$ ./t.sh hw7.list3 
start 
The total number of files is 16 and they use 7346 bytes. 

There are 15 executable files. 

$1 $2 ...設置爲給腳本的參數變量。這裏我使用read來設置變量linod, etc.來自文件名稱在$1(注意done < $1部分)中給出的內容。你試圖做的是創建一個變量名爲hw7.list3這是不可能的,因爲它不是一個有效的Bash變量名稱(它包含一個點)

+0

謝謝,它和我們的類例子有點不同,我從來沒有看到完成<$ 1。我仍然對hw7.list3如何被用作變量感到困惑,我認爲它只是被讀取而已。我會重新編輯程序,並讓你知道它是否最終有效。 – debster

-1

我知道這個線程是舊的,但由於沒有選擇的解決方案我會試一試。

我有一個類似的問題,你有一個小腳本,我希望腳本讀取一個十進制數作爲第一個命令行參數。得到了同樣的錯誤信息。

我不是一個bash專家,我的解決方案可能不是很優雅,但我通過在我的while循環之前放置一個for-command來解決我的問題。你可以嘗試同樣

for filename in $*; do 
exec 9< $1 
while read $1 $2 $3 $4 $5 $6 $7 $8 0<&9 
do 
count='expr $count + 1' 
if [ $4 > "$temp" ] 
then 

... 

done 
+0

這與OP的原始代碼一樣錯誤 - 它仍然試圖在只允許變量名的位置傳遞文件名。 –

+0

...實際上,它比原始代碼** buggier ** - 例如,對於$ *'中的文件名,如果任何文件名作爲參數傳遞的參數包含空格或可以解析爲球體,將會做非常不幸的事情。 –

0

大多數情況下,由於': not a valid identifier:一些特殊字符在腳本

請確保您的編輯器支持的shell腳本命令,較好地避免窗口的編輯。嘗試在Linux中使用pico/vi/gedit

這可能有助於解決同一問題。

+0

雖然這裏並不是所有的情況;在這種情況下,問題是由傳遞一個文件名(這不是一個有效的變量名)作爲'read'的參數引起的。 –

0

這裏的問題是你在做read $variable而不是read variable嘗試沒有$符號,它應該像一個魅力。

+0

這也是一個問題,'$ 1'不是一個常規的變量(不用'set -'來建立一個全新的參數列表)。所以這個問題越來越接近問題,但它本身並不足夠。 –

相關問題