$ SSH_CLIENT的IP地址包含一些端口信息,echo $ SSH_CLIENT给我'10 .0.40.177 52335 22',并且正在运行
if [ -n "$SSH_CONNECTION" ] ;
then
for i in $SSH_CLIENT
do
echo $i
done
fi
给了我
我看到第一个元素是IP地址。
问:如何获取$ SSH_CLIENT的第一个元素? $ {SSH_CLIENT [0]}不起作用。
答案 0 :(得分:22)
sshvars=($SSH_CLIENT)
echo "${sshvars[0]}"
或:
echo "${SSH_CLIENT%% *}"
答案 1 :(得分:8)
您可以使用set --
例如
$ SSH_CLIENT="10.0.40.177 52335 22"
$ set -- $SSH_CLIENT
$ echo $1 # first "element"
10.0.40.177
$ echo $2 # second "element"
52335
$ echo $3
22
答案 2 :(得分:4)
对于字符串,就像这里的情况一样,可以使用<<<
运算符:
$ read ipaddress outport inport <<< $SSH_CLIENT
参见例如:Linux Bash: Multiple variable assignment。 不要使用二进制输入执行此操作:Is there a binary safe <<< in bash?
答案 3 :(得分:0)
您可以通过ssh库(https://code.google.com/p/sshxcute)
以编程方式获取它public static String getIpAddress() throws TaskExecFailException{
ConnBean cb = new ConnBean(host, username, password);
SSHExec ssh = SSHExec.getInstance(cb);
ssh.connect();
CustomTask sampleTask = new ExecCommand("echo \"${SSH_CLIENT%% *}\"");
String Result = ssh.exec(sampleTask).sysout;
ssh.disconnect();
return Result;
}
答案 4 :(得分:0)
如果您更喜欢awk
:
$ SSH_CLIENT="10.0.40.177 52335 22"
$ echo $SSH_CLIENT|awk '{print $1}' # first element
10.0.40.177
$ echo $SSH_CLIENT|awk '{print $2}' # second element
52335
$ echo $SSH_CLIENT|awk '{print $3}' # third element
22
答案 5 :(得分:0)
我在.bash_profile中使用它,并且效果很好。
if [ -n "$SSH_CONNECTION" ] ;
then
echo $SSH_CLIENT | awk '{print $1}'
fi