echo "Enter your string"
read str;
我如何进行检查以确保用户传递了一个单词,如果没有将单词作为参数传递,则显示使用说明。
答案1
[ "$str" ] || { echo "This is my usage statement"; exit 1; }
这里使用test
,用 表示[...]
。在这里使用的最简单的形式是,它仅测试字符串是否为非空(返回成功/真)或空(返回失败/假)。控制运算符||
仅在前一个语句返回假时才执行后面的语句。
我假设,如果用户未能输入非空的str
,则在发出使用语句后,您会希望以失败代码退出。如果不是,请删除exit 1
。
如果您有更复杂的事情要做,那么使用更正式的if
语句:
if [ "$str" ]
then
echo "This is my usage statement"
# do other stuff....
exit 1
fi
以上内容可在任何 POSIX shell 上运行,包括dash
( /bin/sh
) 和bash
。
其他测试
以下是两个相关测试(都需要bash
):
[ "${str//[^[:digit:]]/}" ] || { echo "You entered no numbers"; exit 1; }
和,
[ "${str//[^[:alpha:]]/}" ] || { echo "You entered no letters"; exit 1; }
答案2
如果你想强制用户输入一个字符串而不是数字值,并一直询问直到输入满足要求,我肯定会在 while 循环中使用测试,例如:
#!/bin/bash
while true;
do
echo "Enter your string"
read str;
echo "${str}" | grep -q '[0-9]'
if [ $? != 0 ] && [ "$str" != "" ] ; then
break
else
echo 'Invalid input'
fi
done
# use the input for further processing
echo $str
(使用来自这个帖子)
答案3
您可以尝试使用 string$,并在终端中输入以下内容:
echo“输入你的名字”;字符串$读取字符串$
这样也许能很好地发挥作用。