From 56d71f261a8bd6031e47e2bf80867049a2aa13da Mon Sep 17 00:00:00 2001 From: chenjinsong Date: Thu, 27 Sep 2018 16:11:54 +0800 Subject: initial commit --- linuxinstall/shell/execCmdBySu.sh | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 linuxinstall/shell/execCmdBySu.sh (limited to 'linuxinstall/shell/execCmdBySu.sh') diff --git a/linuxinstall/shell/execCmdBySu.sh b/linuxinstall/shell/execCmdBySu.sh new file mode 100644 index 0000000..4a94436 --- /dev/null +++ b/linuxinstall/shell/execCmdBySu.sh @@ -0,0 +1,78 @@ +#!/usr/bin/expect + +if {$argc!=4&&$argc!=3} { + send_user "usage: execCmdBySu.sh resultFlag command name \[password\]\n" + exit 1 +} +# 0是执行命令并取得结果,1是执行&后台程序 +set resultFlag [lindex $argv 0] +set cmd [lindex $argv 1] +set user [lindex $argv 2] +set pass [lindex $argv 3] + +set timeout 30 +set flag 0 + +#关闭控制台输出信息 +log_user 0 + +spawn whoami +expect "root" {set flag 1} + +# 在执行命令${cmd}后追加"echo $?",为了取cmd命令运行的实际结果, 并屏蔽掉其他不相关的输出信息 +if {$resultFlag==0} { + spawn su - -c "${cmd};echo $?" ${user} + + #当前登录用户不是root,输入密码 + if {$flag==0} { + expect { + "口令*" {send ${pass}\r} + "password*" {send ${pass}\r} + default { + send_error "error\n" + exit 2 + } + } + } + + #打开控制台输出信息 + log_user 1 + + expect { + "* 密码不正确*" {exit 1} + #----此处的目的是为了能读取到所有输出结果 + eof {exit 0} + } + +} else { + spawn su - -c "${cmd}" ${user} + + #当前登录用户不是root,输入密码 + if {$flag==0} { + expect { + "口令*" {send ${pass}\r} + "password*" {send ${pass}\r} + default { + send_error "error\n" + exit 2 + } + } + } + expect { + "* 密码不正确*" {exit 1} + #----为了&后台启动命令能正常结束 + eof { + send_user "ok\n" + exit 0 + } + } +} +interact +exit 0 + + +#overlay chess +#overlay program args +#disconnect +#close -onexec 0 -i ${spawn_id} +#remove_nulls 1 \ No newline at end of file -- cgit v1.2.3