Shell传参的多种方式

Shell 传参的多种方式

  1. 使用$1 $2 这种类似占位符的方式
# 命令行调用
start.sh 8080 9090
# 脚本中获取
port1=$1 # 8080
port2=$2 # 9090

可以看出来这种方式使用起来很简单,但灵活性太差,比如我只想传第二个参数,第一个使用默认值,这个就不行,所以就有第二种,指定参数传递

  1. 指定参数 getopts(shell内置命令)
#命令行调用
start.sh -a 8080 -b 9090
# 脚本中获取
while getopts "d:b:h" arg #选项后面的冒号表示该选项需要参数
do
        case $arg in
             d)
                DEBUG=$OPTARG
                echo "debug: $OPTARG" #参数存在$OPTARG中
                ;;
             b)
                DEBUG_PORT=$OPTARG
                echo "DEBUG_PORT: $OPTARG"
                ;;
             h)
                echo "-d: debug enable,  true or false, default is false"
                echo "-b: debug port, default is 8000"
                echo "-p: web port ,default is 8080"
                exit 1
                ;;
             ?)  #当有不认识的选项的时候arg为?
            echo "unkonw argument"
        exit 1
        ;;
        esac
done

注意:这种参数名只能是一个字母(其它符号没验证过),参数名后面紧接着的内容会被当做value值

上面这种方式可以满足我们大多数的应用场景了,但是由于参数名的限制,如果参数太多,这种命令就不太直观,所以引申出第三种,长参数选项。

  1. 长参数选项 getopt (外部binary文件)

    暂未应用到。。。

原文地址:https://www.cnblogs.com/yissheng/p/9784547.html

时间: 2024-08-01 19:41:44

Shell传参的多种方式的相关文章

python函数 传参的多种方式 解读

1.函数的参数在哪里定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开 案列: 2.带参数的函数调用: 函数定义了参数,那么调用函数的时候就需要传入参数 上面的案列中,我们定义函数的时候在函数名后面的括号里定义的参数叫做形参. 而我们调用函数的时候传入的参数叫做实参,形参是用来接收实参的. 参数的分类 上面我们说了形参和实参,那么形参和实参在在定义和调用的时候,根据形式不同有可以分为几类. 1.根据实参进行分类 实参:位

SHELL传参简单实例

说明:shell传参,顾名思义就是将参数传送到shell脚本里,我们可以将一些参数以sh scripts.sh 参数 参数+1 参数+2 的方式执行.脚本内获取参数的格式为:$n n 代表一个数字,$1 为执行脚本的第一个参数(对应上面的参数)$2 为执行脚本的第二个参数,以此类推-- 下面就举一个简单的栗子: 1.首先编辑一个简单的脚本,如下:[[email protected] 01]# vim 1.sh #!/bin/bashecho "I am $1,you are $2."

SHELL传参注意事项,尽量使用双引号传参

#!/bin/bash function convert(){ keyword=${1//\\/\\\\\\\\} keyword=${keyword//\./\\.} keyword=${keyword//\*/\\\\*} keyword=${keyword//\&/\\\\&} keyword=${keyword//\$/\\\\$} keyword=${keyword//\+/\\\\+} keyword=${keyword//\=/\\\\=} keyword=${keyword

[iOS]视图间传值/传参的若干方式

单例模式 属性 代理 通知 单例模式 某个类只产生一个对象,且是一个全局对象,以后每次创建该类对象时,只会得到第一次创建的那个类对象. 所以,可以用于在多视图场景下传递参数,原理如下图所示. 在创建单例类的时候,需要注意: 首先必须创建一个全局实例,通常存放在一个全局变量中,此全局变量设置为nil 需要重写+allocWithZone:方法,防止通过标准的alloc方式创建新的实例 需要重写-copyWithZone方法,防止通过copy方法得到新的实例 需要重写-mutableCopyWith

Vue 路由传参-使用query方式传递参数

2018-08-15 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <script src="../vue.js"></script> <script src="https://cdn.bootcss.com/vue-r

shell基础:使用read、命令行脚本传参实现输入2个整数并计算

shell基础练习题:使用read交互输入,命令行脚本传参2种方式,实现输入2个整数数字,并计算加减乘除.考察shell基础知识包括:变量定义.read.if判断语句.正则表达式等知识: 第一种方式:read交互输入参数 思路为:判断输入的第2个变量是否为空,为空则提示输入2个数字:不为空则判断输入的是否为整数,用到expr,作用为让2个变量进行相加,如果结果为0说明输入2个为数字,如结果非0则说明输入非整数,提示输入的不是非整数: #!/bin/bash read -p "pls input 

关于Shell脚本read传参问题

Shell脚本传参有两种方式: 方式1:sh  file.sh  arg1 arg 2.... 方式2:read -p "提示"  arg 1 arg2 默认参数直接是以空格进行区分的,下面通过几个实例讲解一下传参遇到的问题及困惑 方式一:通过脚本实例展示 [[email protected] ~]# cat arg1.sh  #!/bin/bash funChag() {   echo $1 $2 } main() {   echo $1 $2   funChag $1 $2 } m

同一路由带参刷新,以及params和query两种方式传参的异同

同一路由应该不叫跳转了吧,就先叫刷新好了. 需求及问题 今天做web课设有这样一个需求: 在导航栏中一项叫做教师队伍一级菜单下,有三个二级菜单,分别为教授.副教授.讲师.这三个二级菜单分别对应一个页面.但是由于显示的排版相同,只是教师信息不同,故想用同一页面,通过选择不同的菜单,传入不同的参数,显示不同的信息. 刚开始的想法是,在实例创建阶段,也就是created阶段将导航栏传给子组件的参数获取到 父组件: this.$router.push({ path: '/jsjj', query:{ i

c/c++ 结构体传参问题

c/c++的结构体传参可以有三种方式: 1.传递结构体变量,值传递 2.传递结构体指针,地址传递 3.传递结构体成员,可是值传递也可以是地址传递 根据代码示例: 1.传递结构体变量 1 #include<iostream> 2 #define COMMANDLENGTH 100 3 using std::cout; 4 using std::endl; 5 //注意 c和c++中struct和typedef struct有区别. 6 struct Message{ 7 int oneField