如何通过shell脚本中的命令行传递参数

lk1*_*121 53 linux bash shell expect

expect在shell脚本中通过命令行传递参数

我试过这个

#!/usr/bin/expect -f

set arg1 [lindex $argv 0]

spawn lockdis -p
expect "password:" {send "$arg1\r"}
expect "password:" {send "$arg1\r"}
expect "$ "
Run Code Online (Sandbox Code Playgroud)

但它不起作用.请帮我搞清楚.

谢谢

bar*_*mar 81

如果你想从参数中读取,你可以简单地实现这一点

set username [lindex $argv 0];
set password [lindex $argv 1];
Run Code Online (Sandbox Code Playgroud)

并打印出来

send_user "$username $password"
Run Code Online (Sandbox Code Playgroud)

该脚本将打印出来

$ ./test.exp user1 pass1
user1 pass1
Run Code Online (Sandbox Code Playgroud)

您可以使用调试模式

$ ./test.exp -d user1 pass1
Run Code Online (Sandbox Code Playgroud)

  • 虽然这有效,但要小心使用它,因为在执行类似"ps aux"之类的操作时,您的进程将显示参数,用户名和密码 (7认同)

use*_*364 8

#!/usr/bin/expect
set username [lindex $argv 0]
set password [lindex $argv 1]
log_file -a "/tmp/expect.log"
set timeout 600
spawn /anyscript.sh
expect "username: " { send "$username\r" }
expect "password: " { send "$password\r" }
interact
Run Code Online (Sandbox Code Playgroud)


小智 7

我喜欢本指南提供的答案。

它创建一个解析参数过程。

#process to parse command line arguments into OPTS array
proc parseargs {argc argv} {
    global OPTS
    foreach {key val} $argv {
        switch -exact -- $key {
            "-username"   { set OPTS(username)   $val }
            "-password"   { set OPTS(password)   $val }
        }
    }
}
parseargs $argc $argv
#print out parsed username and password arguments
puts -nonewline "username: $OPTS(username) password: $OPTS(password)"
Run Code Online (Sandbox Code Playgroud)

以上只是一个片段。完整阅读该指南并添加足够的用户参数检查非常重要。

  • 我喜欢一直检查参数 (2认同)

spb*_*ick 5

更好的方法可能是:

lassign $argv arg1 arg2 arg3
Run Code Online (Sandbox Code Playgroud)

但是,您的方法也应该可行.检查是否arg1已检索.例如,用send_user "arg1: $arg1\n".