【问题标题】:read multiple entries from user to create a file从用户读取多个条目以创建文件
【发布时间】:2017-10-17 00:32:39
【问题描述】:

我正在尝试创建一个文件,该文件是通过打开 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,当我在第一个“名称”提示符处粘贴输出时,它不存在,而且我什至不想输入名称的总数。

【问题讨论】:

    标签: shell unix while-loop text-processing


    【解决方案1】:

    您可以直接将输出粘贴到文件中,而不是编写脚本:

        cat > filename 
        Right Click 
    
        Ctlr+C
    

    【讨论】:

    • 这也不起作用,因为当我 cat > 文件名时,如果我键入粘贴命令然后右键单击以粘贴它推送的复制数据,它将提示我输入下一个命令,粘贴为文本也转到文件中。
    • 更新了答案...之前的答案不是很清楚。
    【解决方案2】:

    在运行之前创建一个 rm 行来清除文件内容,你可能不需要它。 由于您没有提到 shell 变体,我更喜欢在这种情况下使用 sh。

    您的脚本的问题可能是您使用 > 运算符 insted of >> 。 > 清除文件并将文本放入其中。并在下一个循环中再次清除并再次将变量内容放入。

    我用 for 而不是 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
    

    那么这就是你要找的,当你输入空行时会退出,而不是在文件末尾添加空行。只需复制粘贴并按回车一次或两次取决于输入。不幸的是,如果您复制粘贴内容,其中两个部分由空行分隔,这也会退出。

    #!/bin/sh
    
    rm ./temp.txt               # delete old file before run
    
    while read inputline
    do
      [[ $inputline == "" ]] && exit 0
      echo "$inputline" >>  ./temp.txt
    done
    

    【讨论】:

    • 这不起作用,因为问题出在其他地方,在 Unix 机器中,如果您只是右键单击它会转储屏幕上复制的所有数据,我正在尝试使用此功能创建一个文件。
    • 对不起,我错过了你问题的重点。请检查我的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多