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,但也许您在您的上下文中以某种方式阻止了它。
您可以通过以下几种方法来处理它:
- 在他们输入后验证输入 - 检查它是否有任何 spaces,例如:
if [[ "parametros" == *" " ]]; then...
- 在 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。
制作了一个用户提供“参数”的脚本,它会打印出它是文件、目录还是其中之一。就是这样:
#!/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,但也许您在您的上下文中以某种方式阻止了它。
您可以通过以下几种方法来处理它:
- 在他们输入后验证输入 - 检查它是否有任何 spaces,例如:
if [[ "parametros" == *" " ]]; then...
- 在 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。