【问题标题】:how to add output of user input如何添加用户输入的输出
【发布时间】:2019-11-26 08:54:40
【问题描述】:

如何添加用户输入的输出? 使用 nano 编辑器从头开始创建脚本,该脚本将输出作为参数提供的文本、用于创建文件的编辑器的名称以及文本是否长于同一行上的 10 个符号,并用分号分隔并由双引号(例如 somescript this is text 应该输出“this is text”;“nano”;“more then 10 symbols”)。

#!/bin/bash

if [ `echo "$1" | awk '{print length}'` -gt 10 ]

then

    echo '"$1";"nano";"more than 10 symbols"'

else

    echo '"$1";"nano";'

fi

这里需要添加用户输入的文本的输出 (有必要将您传递给脚本的内容作为参数输出)

【问题讨论】:

标签: linux shell redhat


【解决方案1】:

这应该可以解决问题:

#!/bin/bash

if [ `echo "$1" | awk '{print length}'` -gt 10 ]

then

    echo  '"'$1'"'";"'"'nano'"'";"'"'more than 10 symbols'"'


else

echo '"'$1'"'";"'"'nano'"'

fi

./testscript 1234567890
 "1234567890";"nano"

./testscript 12345678910
 "12345678910";"nano";"more than 10 symbols"

【讨论】:

  • 这使得$1 成为一个未引用的扩展。你可以改用printf '"%s";"%s";"%s"\n' "$1" 'nano' 'more than 10 symbols' 之类的东西。
  • 尝试使用'*' 作为参数调用它,你就会明白为什么不加引号的扩展是一个问题。
  • ./testscript 123456*8910 = "123456*8910";"nano";"more than 10 symbols"
  • 假设如果有一个实例只输入* 那么就有问题了。
  • 更普遍(并且可以避免)的问题是$1 包含任何shell 元字符。你没有理由不能引用$1。如果你想使用echo,你可以echo "\"$1\";\"nano\";\"more than 10 symbols\"",或者echo "\"$1\""';"nano";"more than 10 symbols"'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 1970-01-01
相关资源
最近更新 更多