检查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”)。