背景

最近编写ansible脚本,需要自动调用之前写好的shell脚本,由于shell脚本中包含了read命令接收用户的手动输入,为了实现ansible脚本的自动运行,不得不将手动输入转换为自动输入。以下为常见的两种场景:

read命令接收输入

#!/bin/sh
#file name start.sh
echo "please input name"
read name
echo "please intput pssword"
read password echo $name
echo 'line end'
echo $password
#第一种方式
echo -e "robin\npassword"|./start.sh

第一种方式,其实就是使用管道将一个或多个输入传递给待执行的脚本,如果传入多个变量,一定要注意这个\n,经检验read每次读入一个变量值,遇到\n则截断。

#第二种方式
echo -e "robin\npassword" >parm
./start.sh < parm

第二种方式,其实就是将一个或多个变量值存入一个参数文件,每个变量以\n结尾,再将该参数文件传递给shell脚本文件。

#第三种方式
使用expect

由于需要yum install expect 暂未研究。

$1 $2 … 接收传入的参数

#!/bin/sh
#file name start.sh
name=$1
password=$2 echo -e $name\n
echo $password
./start.sh robin password

这种接收参数的方式,也是最简单的好用的方式,shell文件按照顺序接收传入的参数值。

使用getopts接收传入的参数

#!/bin/sh

while getopts ":a:b:c:" opt
do
case $opt in
a)
echo "参数a的值$OPTARG"
;;
b) echo "参数b的值$OPTARG"
;;
c) echo "参数c的值$OPTARG"
;;
?) echo "未知参数"
exit 1;;
esac
done
./start_4.sh -a 1 -b 2

最新文章

  1. [Android Pro] 判断Uri对应的ContentProvider所操作的数据库u存在,及DownloadManager的暂停,继续
  2. 使用Application对象简单完成网站总访问人数的统计
  3. webform JS打印方法
  4. CSS 框模型( Box module )
  5. python group()
  6. oracle 10g 学习之基本 SQL SELECT 语句(4)
  7. oracle数据库不支持mysql中limit功能
  8. Codeforces 596D Wilbur and Trees
  9. 列表操作之定义,切片(取元素)(Python)
  10. java多线程系列(九)---ArrayBlockingQueue源码分析
  11. 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)
  12. Django 项目搭建(ubuntu系统)
  13. windows下编译Grafana前端
  14. TCP和UDP的区别以及使用python服务端客户端简单编程
  15. Docker-Compose入门
  16. java泛型使用教程
  17. Mac Terminal open app with a file opened
  18. 搭建Hadoop的HA高可用架构(超详细步骤+已验证)
  19. DBCC--CHECKIDENT
  20. LFD,非官方的Windows二进制文件的Python扩展包

热门文章

  1. shell脚本从文件夹中递归提取文件
  2. mongoDB坑
  3. Lua2
  4. windows版本cloudbase-init流程说明
  5. [OpenCV]Mat类详解
  6. kibana的查询语法
  7. php session 测试
  8. linux运维文章
  9. 第十二篇:HTML基础
  10. XJOI NOIP模拟题1