Bash 允许一个词作为用户输入的脚本

Bash script that allows one word as user input

制作了一个用户提供“参数”的脚本,它会打印出它是文件、目录还是其中之一。就是这样:

    #!/bin/bash
read parametros
for filename in *
do
 if [ -f "$parametros" ];
 then
  echo "$parametros is a file"
 elif [ -d "$parametros" ];
 then
  echo "$parametros is a directory"
 else
  echo " There is not such file or directory"
 fi
 exit
done

虽然我希望允许用户只给出一个词作为参数。我该如何做到这一点? (例如,如果用户在第一个单词后按 space,则会出现一条显示“错误输入”的错误消息)

你必须使用$#。它给出了参数的数量。 代码将类似于:

if [ "$#" -ne 1 ]; then
    printf 'ERROR!\n'
    exit 1
fi

首先,我很好奇您为什么要限制为一个词 - 一个文件或目录中可能有 space,但也许您在您的上下文中以某种方式阻止了它。

您可以通过以下几种方法来处理它:

  1. 在他们输入后验证输入 - 检查它是否有任何 spaces,例如:if [[ "parametros" == *" " ]]; then...
  2. 在 while 循环中一次获取一个字符,例如:read -n1 char
    • 如果是 space
    • 则显示错误
    • 如果是 'enter'
    • 则中断循环
    • 从输入的字符构建整个字符串

1 显然要简单得多,但也许 2 值得为您所希望的即时反馈付出努力?

#!/bin/bash
read parametros
if [[ "$parametros" = *[[:space:]]* ]]
then
  echo "wrong input"
elif [[ -f "$parametros" ]]
then
  echo "$parametros is a file"
elif [[ -d "$parametros" ]]
then
  echo "$parametros is a directory"
else
  echo " There is not such file or directory"
fi

[...][[...]] 的区别参见 http://mywiki.wooledge.org/BashFAQ/031