我想根据我提供的参数向ssh
写一个简短的脚本到不同的服务器 - 如果它是一个数字,我希望该数字是服务器名称的一部分,如果它是一个字母我希望它连接到某个服务器。到目前为止,我有这个:
#!/bin/bash
if [ $1 -eq ^[1,3-5]$ ]; then
ssh -X servername1$1
elif [ $1=h ]; then
ssh -X servername2
fi
但它一直抱怨整数表达式是预期的,并且总是尝试连接到servername2,无论我给它一个数字还是一个字母。 我尝试了第一次和第二次比较的引号,我在第二次比较中尝试了双等号 - 都无济于事。我怎样才能做到这一点?
答案 0 :(得分:1)
[ $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
,使用正则表达式(我认为^[a-zA-Z]$
会有效)
答案 1 :(得分:1)
我想你有一个服务器列表,你从中获取参数$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
SSH通过添加来自stdin
的输入从/dev/null
获取输入,您正在告诉ssh从该特定文件中获取输入。
使用[[...]]
表示if
有表达式。
您可以在this link "Confused about operators"
中详细了解[[..]]
同样$1=h
是作业而非比较; ==
用于比较。