Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 从用户处读取多个条目以创建文件_Shell_Unix_While Loop_Text Processing - Fatal编程技术网

Shell 从用户处读取多个条目以创建文件

Shell 从用户处读取多个条目以创建文件,shell,unix,while-loop,text-processing,Shell,Unix,While Loop,Text Processing,我试图创建一个手动创建的文件,方法是打开一个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 但它不起作用,因为它希望在每次输入后输入一个En

我试图创建一个手动创建的文件,方法是打开一个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,而当我在第一个“Name”提示符下粘贴一个输出时,它并不存在,而且我甚至不想输入名称的总数。

好的,您可以使用以下命令直接将输出粘贴到文件中,而不是编写脚本:

    cat > filename 
    Right Click 

    Ctlr+C

在运行之前制作rm行以清除文件内容,可能您不需要它。 因为您没有提到shell变量,所以在本例中我更喜欢使用sh

脚本的问题可能是您使用了>操作符而不是>>。>清除文件并将文本放入其中。在下一个循环中,它再次清除并将变量内容再次放入

我用它代替了while,因为它掠夺速度更快,代码更小

#!/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

这不起作用,因为问题出在其他地方,在Unix机器中,如果您只需右键单击,它会转储屏幕上复制的所有数据,我正在尝试使用此功能一次性创建文件。对不起,我没有抓住您问题的重点。请检查我的更新。这也不起作用,因为当我键入“粘贴命令”,然后右键单击粘贴它所推送的复制数据时,它将提示我输入下一个命令,粘贴为文本也将进入文件。更新了答案。。。之前的答案并不那么清楚。
#!/bin/sh

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

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