如何检查参数在shell中是不是有单个字符

Posted

技术标签:

【中文标题】如何检查参数在shell中是不是有单个字符【英文标题】:How to check if an argument has a single character in shell如何检查参数在shell中是否有单个字符 【发布时间】:2012-11-09 03:22:14 【问题描述】:

我正在尝试编写一个脚本来检查参数是否有单个大写或小写字母,或者是否有其他任何内容(例如数字或单词。)

到目前为止已经完成了:

if echo $1 | egrep -q '[A-Z]';
    then echo "Uppercase";
elif echo $1 | egrep -q '[a-z]';
    then echo "Lowercase";
else
    echo "FAIL";
fi 

不仅如果它不是一个字母,而且如果我插入一个单词或 2 个字母,都需要让它失败。

【问题讨论】:

感谢您提出的清晰且格式正确的问题。新的到来的良好开端。 =) 第一个问题做得很好!没见过太多这样的。 :) 恐怕我不知道你的问题的答案。 :( 你的外壳是什么?是 bash 吗? 【参考方案1】:

你非常接近!

if echo $1 | egrep -q '^[A-Z]$';
    then echo "Uppercase";
elif echo $1 | egrep -q '^[a-z]$';
    then echo "Lowercase";
else
    echo "FAIL";
fi
我刚刚添加了特殊字符^$,分别表示行首行尾 那里不用egrepgrep就够了

【讨论】:

尴尬了QQ应该是自己搞定的。非常感谢! 请注意,如果$1 包含换行符,则会失败。【参考方案2】:

使用case

case "$1" in
    [a-z]) echo First argument is a lower case letter;;
    [A-Z]) echo First argument is an upper case letter;;
    *) echo First argument is not a single letter;;
esac

【讨论】:

还不能用例,老师要求所以...还是谢谢你:)【参考方案3】:

如果你使用 bash,

if [[ $1 == [[:upper:]] ]]; then
    echo "$1 is a single capital letter"
elif [[ $1 == [[:lower:]] ]]; then
    echo "$1 is a single lowercase letter"
else
    echo "$1 is not a letter or is more than 1 char"
fi

双等号告诉 bash 匹配右侧的模式。

【讨论】:

是的,也可以,但问题是它必须知道它是高还是低,并显示出来。

以上是关于如何检查参数在shell中是不是有单个字符的主要内容,如果未能解决你的问题,请参考以下文章

如何检查传递给 shell 脚本的参数是不是不是整数?

Shell如何检查文件中的一行中是不是存在模式

检查 Bash shell 脚本中是不是存在输入参数

如何检查一个进程是不是在 docker 容器内运行?

如何检查@RequestMapping 参数中的请求参数是不是为空字符串?

Spring MVC - 如何检查是不是没有传递意外的查询字符串参数?