我很期待;但是,我有一个当前预期的脚本需要修改,我很难过。
这是我正在尝试做的事情,
主机 HOSTNAME | awk'{print $ 3}'| awk -v FS ='。' '{print $ 4}'| tr -d','
如果结果是特定数字(IP地址的第4个八位字节),则将变量分配给要在脚本中使用的特定值。如果它是不同的值,则为其分配不同的变量值。
有关我正在尝试使用该脚本的更多详细信息: - 我有2种不同的环境(都以特定的第4个八位字节结尾) - 将文件scp到远程服务器(每个环境都有不同的文件) - 连接到系统(每个环境的登录提示也不同,因此会为每个环境传递不同的值)
*对不起,如果这令人困惑*
这是我到目前为止(是的,我更改了一些值来保护我的环境)。
spawn host hostname | awk {print \$3} | awk -v FS=. {print \$4} | tr -d ,
expect -exact 15 {
set PSWPROMPT password:
set REXPECT remotescript.exp
} -exact 10 {
set PSWPROMPT Password:
set REXPECT remotescript.exp_rh
}
send_user $PSWPROMPT $REXPECT
expect "$"
spawn scp -p filename user@hostname:PATH_FILENAME*
expect -exact "connecting (yes/no)?" {
send "yes\r"
expect -exact $PSWPROMPT
send "filename\r"
} -exact $PSWPROMPT {
send "filename\r"
}
expect "$"
spawn scp -p filename user@hostname:PATH_FILENAME
expect -exact "connecting (yes/no)?" {
send "yes\r"
expect -exact $PSWPROMPT
send "password\r"
} -exact $PSWPROMPT {
send "password\r"
}
expect "$"
spawn scp -p $REXPECT *username*@$hostname:PATH_FILENAME*
expect -exact "connecting (yes/no)?" {
send "yes\r"
expect -exact $PSWPROMPT
send "password\r"
} -exact $PSWPROMPT {
send "password\r"
}
expect "$"
答案 0 :(得分:0)
由于您在本地计算机上执行该操作,并且该命令没有任何交互性,因此只需使用exec
并捕获输出:
set output [exec host hostname | awk {{print $3}} | awk -v FS=. {{print $4}} | tr -d ,]
请注意,Tcl / expect中的花括号就像shell中的单引号一样。要将所需的大括号传递给awk,我们需要将大括号加倍。或者使用双引号,并转义awk美元符号:
set output [exec host hostname | awk "{print \$3}" | awk -v FS=. "{print \$4}" | tr -d ,]
或者我们可以做很多期望的工作:
set host_output [exec host hostname]
set first_list [lindex [split $output \n] 0]
set 3rd_word [lindex [split $first_line] 2]
set 4th_octet [lindex [split $3rd_word .] end]
set no_commas [string map {, ""} $4th_octet]
OR 使用正则表达式:
regexp {.*\.(\d+)} [exec host hostname] -> last_octet