Você está misturando os códigos expect e bash. Seu script é principalmente um script bash, então
substitua a linha superior por #!/bin/bash
. Em seguida, substitua as linhas:
sudo passwd ${!tmp}
expect -exact "[sudo] password for $current_user: "
send "$pass\r"
expect -exact "New password: "
send "$password\r"
por uma chamada para uma função mychangepw
com os argumentos que esperam
necessidades, ou seja, o usuário atual, a senha sudo, o usuário a alterar e sua senha:
mychangepw $current_user "$pass" ${!tmp} "$password"
Adicione a função ao início do script e use-a para passe os args para esperar, com o script expect em stdin até a linha "!":
mychangepw(){
expect -d - "$@" <<\!
set current_user [lindex $argv 0]
set sudopass [lindex $argv 1]
set user [lindex $argv 2]
set password [lindex $argv 3]
spawn sudo passwd $user
expect -exact "\[sudo\] password for $current_user: "
send "$sudopass\r"
expect -exact "New password: "
send "$password\r"
!
}
Tenha cuidado com a linha que começa com "!". Deve ser o primeiro e único char da linha, sem recuo nem espaços em branco adicionais nem comentários, etc.