$myscript.sh -host blah -user blah -pass blah
我想将参数传递给它。
我已经习惯了这样做$1,$2,$3....但我要开始对其进行命名
$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将在脚本可用。
$host
$user
$pass
#!/bin/sh echo host = ${host:?host empty or unset} echo user = ${user?user not set} ...