簡體   English   中英

從用戶讀取多個條目以創建文件

[英]read multiple entries from user to create a file

我正在嘗試創建一個文件,該文件是通過打開vi編輯器然后Esc + i手動創建的,然后將一列條目粘貼到它,然后粘貼Esc:wq !,我什至不希望用戶打開vi編輯器,腳本應輸入數據列表,並應創建文件並向其中添加條目。

count=1
read total
while [ "$count" -le "$total" ]; do read -p Name  ; echo $Name > /tmp/cl; count=$(($count + 1)); done

但是它不起作用,因為它期望在每個輸入之后都輸入一個Enter,當我在第一個“名稱”提示下粘貼輸出時,該輸入不存在,而且,我什至都不希望輸入名稱的總數。

好吧,不用編寫腳本,您可以使用以下命令直接將輸出粘貼到文件中:

    cat > filename 
    Right Click 

    Ctlr+C

制作一條rm行以清除文件內容,然后再運行,也許您不需要它。 因為您沒有提到shell變體,所以在這種情況下我更喜歡使用sh。

您腳本的問題可能是您使用了>>的>運算符。 >清除文件並將文本放入其中。 然后在下一個循環中再次清除,然后將變量內容再次放入。

我之所以用而不是用,是因為它搶劫更快,代碼更小。

#!/bin/sh

read -p "Total: " total    # Input for loop cycle count
rm ./temp.txt               # delete old file before run
for (( i=1 ; i <= $total ; i++ ))
do
    read -p "Name: " Name       # get name
        echo $Name >> ./temp.txt   # put it into file named temp.txt
done

這就是您要尋找的那個,當您輸入空行而不將空行添加到文件末尾時將退出。 只需復制粘貼並按輸入一次或兩次回車就取決於輸入。 不幸的是,如果您將粘貼內容復制到用空行分隔的兩個部分的位置,則該內容也會在那里退出。

#!/bin/sh

rm ./temp.txt               # delete old file before run

while read inputline
do
  [[ $inputline == "" ]] && exit 0
  echo "$inputline" >>  ./temp.txt
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM