Я написал сценарий ожидания, чтобы создать пользователя на сервере unix. Это в основном подключается через SSH к серверу с помощью моего верительных и су укоренить сделать useradd и т.д. (я понимаю, что есть другие методы, чтобы сделать то же самое, но я ограничен такими параметрами и окружающей среды в настоящее время.)Ожидайте скрипта, если пользователь существует до создания
set prompt "(%|#|>|\\\$)"
set prompt [string trim $prompt]
spawn ssh -o StrictHostKeyChecking=no -l $my_user $hostname
expect "?assword: "
send "$my_pass\r"
expect -re $prompt
send "/usr/bin/su - \r"
expect "?assword: "
send "$root_pass\r"
expect -re $prompt
send "/usr/sbin/useradd -d /export/home/$user -m -s /bin/sh $user \r"
expect -re $prompt
send "/usr/bin/passwd $user \r"
expect "?assword:"
send "$new_pass\r"
expect "?assword:"
send "$new_pass\r"
send "exit\r"
expect -re $prompt
send "exit\r"
expect -re $prompt
Однако, если я застрял в добавлении логики, чтобы проверить, существует ли пользователь в системе. Если бы это было в bash, я бы добавил grep -c '^USER' /etc/passwd
, чтобы проверить возвращаемый номер. Но я не могу зафиксировать возвращаемый номер из ожидаемого. Слишком много информации возвращено после того, как я добавил:
send "egrep -c '^$user' /etc/passwd \r"
set output $expect_out(buffer)
Может ли кто-нибудь сказать мне, как разобрать весь выход? Я знаю, что это очень простая задача. Вероятно, это просто, если ... тогда .. еще, но я не могу произвести ничего полезного на прошлой неделе.
спасибо. Удаленный хост, который у меня есть, находится на Solaris. Однако я смог найти решение. – Ben