2010-02-09 34 views
8

$ SSH_CLIENT có địa chỉ IP với một số thông tin cổng, và echo $ SSH_CLIENT mang lại cho tôi '10 .0.40.177 52.335 22' , và Chạy

if [ -n "$SSH_CONNECTION" ] ; then for i in $SSH_CLIENT do echo $i done fi

mang lại cho tôi

  • 10.0.40.177

Và tôi thấy phần tử đầu tiên là địa chỉ IP.

H: Làm cách nào để có thể lấy phần tử đầu tiên của $ SSH_CLIENT? $ {SSH_CLIENT [0]} không hoạt động.

Trả lời

17
sshvars=($SSH_CLIENT) 
echo "${sshvars[0]}" 

hay:

echo "${SSH_CLIENT%% *}" 
+2

Đối với tránh khỏi thất bại (như tôi) thứ hai là làm "tham số thay thế." Đây là một tham chiếu: http://tldp.org/LDP/abs/html/parameter-substitution.html – notJim

8

bạn có thể sử dụng set -- ví dụ

$ 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 
3

Đối với chuỗi, như trường hợp ở đây, các nhà điều hành <<< có thể được sử dụng:

$ read ipaddress outport inport <<< $SSH_CLIENT 

Xem ví dụ: Linux Bash: Multiple variable assignment. Đừng làm điều này với đầu vào nhị phân mặc dù: Is there a binary safe <<< in bash?

+2

Không có lý do gì để làm '$ (echo ...)' , nó giống như chỉ inclu ding biến. –

+0

Đúng vậy. Đã sửa. – Emil

0

Bạn có thể nhận nó theo cách chương trình thông qua thư viện 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; 
} 
0

Nếu bạn thích 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 
Các vấn đề liên quan