最近编写ansible脚本,需要自动调用之前写好的shell脚本,由于shell脚本中包含了read命令接收用户的手动输入,为了实现ansible脚本的自动运行,不得不将手动输入转换为自动输入。
# 第一种方式,其实就是使用管道将一个或多个输入传递给待执行的脚本,如果传入多个变量,一定要注意这个\n,经检验read每次读入一个变量值,遇到\n则截断。
echo -e "robin\npassword"|./start.sh
# 第二种方式,其实就是将一个或多个变量值存入一个参数文件,每个变量以\n结尾,再将该参数文件传递给shell脚本文件。
echo -e "robin\npassword" >parm./start.sh < parm
# 第三种方式,由于需要yum install expect 暂未研究。
使用expect
# 第四种方式,$1 $2 .. 接收传入的参数,这种接收参数的方式,也是最简单的好用的方式,shell文件按照顺序接收传入的参数值。
#!/bin/sh#file name start.shname=$1password=$2echo -e $name\necho $password./start.sh robin password
# 第五种方式,使用getopts接收传入的参数
#!/bin/shwhile getopts ":a:b:c:" optdocase $opt ina)echo "参数a的值$OPTARG";;b) echo "参数b的值$OPTARG";;c) echo "参数c的值$OPTARG";;?) echo "未知参数"exit 1;;esacdone
# read命令接收输入,有时候参数包括密码,不想每次都输入,但是又不想在历史记录泄露密码, read -s就可以读入密码,而且只在当前shell有效,历史记录也查询不到。
#!/bin/sh#file name start.shecho "please input name"read nameecho "please intput pssword"read -s passwordecho $nameecho $password
文章转载自运维时刻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




