zoukankan      html  css  js  c++  java
  • Linux Shell 参数传递多种方式

    背景

    最近编写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
    password"|./start.sh
    

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

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

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

    #第三种方式
    使用expect
    

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

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

    #!/bin/sh
    #file name start.sh
    name=$1
    password=$2
    
    echo -e  $name
    
    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
    
    如果您喜欢我,可以通过微信请我喝果汁。

    如果有疑问,可以留言或者发邮件给我 lhh_nj@163.com
  • 相关阅读:
    HDU 4782 Beautiful Soup (模拟+注意细节)
    Linux 简单socket实现UDP通信
    Linux 简单socket实现TCP通信
    HDU 1698 Just a Hook(线段树区间覆盖)
    HDU 1271 整数对(思路题)
    HDU 2222 Keywords Search (AC自动机模板题)
    Windows平台使用Gitblit搭建Git服务器图文教程
    Git克隆
    移动端布局,div按比例布局,宽度为百分比,高度和宽度一样,即让div为正方形
    calc()问题
  • 原文地址:https://www.cnblogs.com/lihuanhuan/p/10612101.html
Copyright © 2011-2022 走看看