当前位置: 首页 > 面试题库 >

解析Shell脚本参数

卜方伟
2023-03-14
问题内容
$myscript.sh -host blah -user blah -pass blah

我想将参数传递给它。

我已经习惯了这样做$1$2$3....但我要开始对其进行命名


问题答案:

有很多方法可以解析sh中的参数。Getopt很好。这是一个简单的脚本,可以手动解析内容:

#!/bin/sh
# WARNING: see discussion and caveats below
# this is extremely fragile and insecure

while echo $1 | grep -q ^-; do
    # Evaluating a user entered string!
    # Red flags!!!  Don't do this
    eval $( echo $1 | sed 's/^-//' )=$2
    shift
    shift
done

echo host = $host
echo user = $user
echo pass = $pass
echo args = $@

运行示例如下:

$ ./a.sh -host foo -user me -pass secret some args
host = foo
user = me
pass = secret
args = some args

请注意,由于脚本eval是由用户构造的字符串,因此它甚至不具有强大的鲁棒性,也没有向安全漏洞开放。它仅是作为一种可能的做事方式的示例。一种更简单的方法是要求用户在环境中传递数据。在bourne
shell中(即,不在csh系列中的任何东西):

$ host=blah user=blah pass=blah myscript.sh

工作得很好,和变量$host$user$pass将在脚本可用。

#!/bin/sh
echo host = ${host:?host empty or unset}
echo user = ${user?user not set}
...


 类似资料:
  • 问题内容: 关于这种事情有很多问题,但让我们想象一下,我们的目标是安装了getopt和getopts的通用Linux系统(不是我们将使用其中任何一种,但它们似乎很流行) 如何同时解析长参数(–example | –example简单选项)和短参数(-e | -esimple-example | -e简单示例) 问题答案: 您想使用多头和空头期权。工作代码示例: 注意,是先前定义的功能(未显示)。

  • 问题内容: 我正在尝试将外壳程序脚本中的JSON对象解析为数组。 例如:Amanda,25岁,[http://mywebsite.com] JSON看起来像: 我不想使用任何库,最好是可以使用正则表达式或grep。我已经做好了: 这给了我“名字”:“阿曼达”。我可以为文件中的每一行循环执行此操作,然后将其添加到数组中,但是我只需要右侧而不是整行。 问题答案: 如果您确实无法使用适当的JSON解析器

  • 问题内容: 我试图解析WMIC的输出,然后获取PID。 我的脚本如下: 输出如下: 我的目标是获取进程ID。 我已经尝试过将空间作为FOR循环中的delims。然而没有运气。 所以我的问题是如何格式化WMIC的列并获取列? 问题答案: WMIC使用SQL语法的子集。通过将LIKE运算符与通配符一起使用,可以在功能上将FINDSTR测试放在WMIC WHERE子句中。由于它在批处理脚本中,因此需要加

  • 终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要。下面笔者就带你正式进入shell脚本的世界吧。 到现在为止,你明白什么是shell脚本吗?如果明白最好了,不明白也没有关系,相信随着学习的深入你就会越来越了解到底什么是shell脚本。首先它是一个脚本,并不能作为正式的编程语言。因为是跑在linux的s

  • bash csh ksh zsh 基本语法 定义和使用变量 #!/bin/sh a=" hello world" echo $a echo 'a is xiaxaiwen${a}' if else if ....; then   .... elif ....; then   .... else   .... fi [] 条件测试 [] 中前后一定要加空格 sh

  • 本文向大家介绍Shell脚本传参数方法总结,包括了Shell脚本传参数方法总结的使用技巧和注意事项,需要的朋友参考一下 一、接收固定长度的参数 空参数执行 传递2个参数执行 二、那如果还有参数怎么办呢?还要一个个加上来吗?答案是否定的 以下用法应该不陌生,就是直接执行脚本本身,没有附带任何参数,那么脚本讲抛出帮助信息.即怎么使用此脚本.见红字部分 代码如下 详细的执行过程如下 不传参数执行 传递3