Bourne Shell do while 循環傳回所有數據,但有兩個錯誤:沒有這樣的檔案或目錄並重複 shell 名稱

Bourne Shell do while 循環傳回所有數據,但有兩個錯誤:沒有這樣的檔案或目錄並重複 shell 名稱

我的循環的想法是列印文件每一行的第一個數字。文件是這樣的:

256-56-8411     Bob     3.61    Junior          CS
471-44-7458     Tim     3.45    Senior          CE
326-56-4286     Rajesh  2.97    Freshman        TE
548-66-1124     Eric    2.88    Sophomore       EE
447-21-3599     John    2.51    Junior          CS
911-41-1256     Rebecca 3.92    Senior          CS
854-22-6372     Robin   2.45    Freshman        TE

運行腳本後的輸出是:

    This is a script that analyses student data from input file students.txt
----------------------------------------------------------------------
./student_script: line 8: 2
4
3
5
4
9
8: No such file or directory
7 is the number of students in the input file.

最後,程式碼是:

echo "This is a script that analyses student data from input file $1"
echo "----------------------------------------------------------------------"
studentCount=`wc -l < $1 `
tempFile=`cut -c1 $1`
while read n
do
echo "$n"
done < $tempFile

echo "$studentCount is the number of students in the input file."

解決此問題後,我計劃使用 while 迴圈來檢查第一個數字是否為 4,然後說明有多少 ID(第一列)不以 4 開頭。

我不介意學習比我的方法更乾淨的解決方案,但這是一堂課,我認為我們並沒有學到很多東西。在我的旅程中,我看到了很多與 awk 類似的東西,但我們還沒有學過 awk。

但是,是的,基本上我確實從循環中獲得了我想要的所有數據,除了它添加了這兩個額外的位。

答案1

您在這一行中寫的內容:

tempFile=`cut -c1 $1`

不建立名為tempFile.因此您無法從中讀取內容。

您可以將該行變更為:

cut -c1 "$1" > tempFile

tempFile並且將建立一個名為 的檔案供while read循環讀取。不要$tempFile在該循環中使用,因為該變數$tempfile為 null(不存在)。使用類似的東西(沒有$):

done < tempFile

但是,簡單的命令cut -c1 "$1"將寫入來源檔案中的所有第一個字符,只需執行以下命令即可查看:

cut -c1 "sourcefile"

知道這一點後,您不需要 tempFile 來保存值,只需使用此處文件即可。

使用此處的文檔並清除腳本中的一些其他問題:

#!/bin/sh
echo "This is a script that analyses student data from input file $1"
echo "----------------------------------------------------------------------"
studentCount="$(wc -l < "$1" )"

while read n
do
    echo "$n"
done <<-_avoid_a_file_
$(cut -c1 "$1")
_avoid_a_file_

echo "$studentCount is the number of students in the input file."

使用 she-bang (#!) 來指示哪個解釋器應該運行程式碼是一個很好的做法。在這種情況下,我假設您想要sh因為提到了Bourne shell.請注意,原始的 Bourne shell 相當古老(~1979 年),並且在更新的 shell(ksh、bash、mksh、zsh 等)中添加了許多改進。

相關內容