Linux shell 脚本 间接获取输入参数的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux shell 脚本 间接获取输入参数的方法相关的知识,希望对你有一定的参考价值。

Linux shell 脚本下,获取输入参数使用$1,$2,可以直接使用$1,$2来获取输入参数,请问可以间接获取输入参数么,例如var=1 根据var的值来获取输入参数,这种语法应该怎么写?
我的问题的意思是在shell脚本中,var=2, 这个时候我如果想获取第二个输入参数也就是($2)怎么获取,$$var好像不行

如果是bash,可以用indirect expansion来搞,语法为 $!var。
比如
foo=bar
bar=123
echo $!foo
会打印 123

再比如下面的脚本,依次打印脚本的各个输入参数。

#!/bin/bash
var=1
while [ $var -le $# ]
do
echo "Param $var is $!var"
let var++
done

不用indirect expansion,也可以用 eval, 比如

#!/bin/bash
var=1
while [ $var -le $# ]
do
eval echo "Param $var is \$$var"
let var++
done追问

我想问一下,第一种的话,只有bash才会有的写法么?其他的shell支持么?这两种都很好,非常感谢

参考技术A 1. 用eval,可以把字符串当作命令来执行:
val=2
eval "x=\$$val"
echo $x

2. 用"$@"把参数列表转化成数组
val=1
x=( "$@" )
echo "$x[$val]"
注意:数组是从0开始的,也就是 $x[0] 对应 $1、$x[1] 对应 $2,依次类推……
参考技术B cat > a.sh << EOF
#!/bin/bash

FILES="$@"

for f in $FILES
do
echo $f
done

EOF
参考技术C http://www.ibm.com/developerworks/cn/linux/l-bash-parameters.html
你可以看下这个文章
参考技术D 脚本再包一层? 写个脚本来调用当前的

shell脚本获取参数&在线执行shell脚本

参考技术A 本文介绍以下2个知识点,为后后续在工作过程中安装一键安装脚本打好基础:

如下shell脚本中传入的参数依次值如下:

如脚本 getopts.sh

执行 ./getopts.sh -a dd -b ,打印如下结果

如脚本 for.sh

有时候shell脚本可以放在http页面上,不用download,可以直接执行。

https://www.cnblogs.com/klb561/p/8933992.html
https://www.cnblogs.com/faberbeta/archive/2004/01/13/13559686.html

以上是关于Linux shell 脚本 间接获取输入参数的方法的主要内容,如果未能解决你的问题,请参考以下文章

linux shell 脚本读取用户输入的参数如何解决?

linux shell脚本读取用户输入的参数

linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令

[Linux脚本]Shell脚本编程

[Linux脚本]Shell脚本编程

linux shell脚本读取用户输入的参数