检查bash脚本输入变量是否为字母

检查bash脚本输入变量是否为字母,bash,if-statement,Bash,If Statement,我想根据我提供的参数为不同的服务器编写一个简短的脚本ssh——如果是一个数字,我希望该数字成为服务器名称的一部分,如果是一个字母,我希望它连接到某个服务器。到目前为止,我有: #!/bin/bash if [ $1 -eq ^[1,3-5]$ ]; then ssh -X servername1$1 elif [ $1=h ]; then ssh -X servername2 fi 但它一直抱怨需要整数表达式,并且总是尝试连接到servername2,不管我给

我想根据我提供的参数为不同的服务器编写一个简短的脚本
ssh
——如果是一个数字,我希望该数字成为服务器名称的一部分,如果是一个字母,我希望它连接到某个服务器。到目前为止,我有:

#!/bin/bash

if [ $1 -eq ^[1,3-5]$ ]; then
        ssh -X servername1$1
elif [ $1=h ]; then
        ssh -X servername2
fi
但它一直抱怨需要整数表达式,并且总是尝试连接到servername2,不管我给它一个数字还是一个字母。
我试着在第一次和第二次比较中使用引号,我试着在第二次比较中使用双等号,但都没有用。我如何才能做到这一点?

[$1-eq^[1,3-5]$]
不是bash语法

你可以这样写:

#!/bin/bash

if [[ $1 =~ ^[1,3-5]$ ]]; then
        echo "$1 integer"
elif [ $1 = h ]; then
        echo "$1 letter" 
fi
输出:

[sahaquiel@sahaquiel-PC Stackoverflow]$ ./numorlet.sh 1
1 integer
[sahaquiel@sahaquiel-PC Stackoverflow]$ ./numorlet.sh 3
3 integer
[sahaquiel@sahaquiel-PC Stackoverflow]$ ./numorlet.sh 10
[sahaquiel@sahaquiel-PC Stackoverflow]$ ./numorlet.sh h
h letter
[sahaquiel@sahaquiel-PC Stackoverflow]$ ./numorlet.sh hhhh
[sahaquiel@sahaquiel-PC Stackoverflow]$ 
另外,请告诉我,如果这封信只写“h”,或者可以是任何一封?
如果有的话,在
elif
条件下使用
[[
而不是
[
,使用regex(我认为
^[a-zA-Z]$
可以)

我假设您有一个服务器列表,其中包含参数
$1
。 如果是,您必须对代码进行一些更改

#!/bin/bash

if [[ $1 -eq ^[1,3-5]$ ]]; then
        ssh -X servername1$1 < /dev/null
elif [[ $1==h ]]; then
        ssh -X servername2 < /dev/null
fi
!/bin/bash
如果[$1-eq^[1,3-5]$]];则
ssh-X servername1$1
SSH从
stdin
获取输入,方法是从
/dev/null
添加输入,您告诉SSH从该特定文件获取输入

使用
[…]
告诉
if
有一个表达式

您可以在中阅读有关
[[…]]
的更多信息


另外,
$1=h
是一个赋值,而不是一个比较;
=
用于比较。

我想,我找到了解决方案。我不能让
-eq
[1,3-5]
一起工作,但这是可行的:
[[$1=[1,3-5]]
。如果有人能解释原因,那就太好了,因为我在网上尝试了不同的解决方案。不过我很想理解它。现在明白了。我以前看到过
=~
,但我认为它不是等号。我现在明白了,这是一件完全不同的事情。是的,字母“h”只是我选择用作脚本的参数。当我要连接到“hpc群集”节点()时,很容易记住使用“h”)。