分页: 1 / 1

怎么向linux脚本传递参数

发表于 : 2012-02-18 9:21
NewUserFF
比如说我有一个脚本,名为script.sh,然后有打算有几个选项,分别为-a, -b, -c
1.输入./script.sh -a时,执行echo "a"
2.输入./script.sh -b时,执行echo "b"
3.输入./script.sh -c时,执行echo "c"
4.输入./script.sh -abc时,执行echo "a"和echo "b"和echo "c"
......
我知道脚本中有个$1,可以取得命令参数的内容,但这个好像东西好像对于这个功能不是很好用,比如,如果我仅仅想实现前三个功能,很简单,检测$1是-a还是-b还是-c就可以了,但是如果用户输入的是-abc或者-a -b怎么办?怎么才能智能检测选项的内容?

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 9:24
枫叶饭团
用for循坏检测

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 9:24
ljj_jjl2008
好像需要你自己写if语句判断。
没有好法。

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 9:40
NewUserFF
晕,不会 吧,shell又一次让我失望了 :em20

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 10:44
MaskRay

代码: 全选

while getopts abc name; do
    echo $name
done

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 14:06
tusooa
NewUserFF 写了:比如说我有一个脚本,名为script.sh,然后有打算有几个选项,分别为-a, -b, -c
1.输入./script.sh -a时,执行echo "a"
2.输入./script.sh -b时,执行echo "b"
3.输入./script.sh -c时,执行echo "c"
4.输入./script.sh -abc时,执行echo "a"和echo "b"和echo "c"
......
我知道脚本中有个$1,可以取得命令参数的内容,但这个好像东西好像对于这个功能不是很好用,比如,如果我仅仅想实现前三个功能,很简单,检测$1是-a还是-b还是-c就可以了,但是如果用户输入的是-abc或者-a -b怎么办?怎么才能智能检测选项的内容?
简单点,

代码: 全选

#!/bin/bash
while [[ $# > 0 ]] ; do
    if [[ "$1" = -* ]]; then
        arg="${1#-}"
        eval "$(sed -re 's/(.)/echo "\1"\n/g' <<< "$arg")"
    fi
    shift
done

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 14:07
tusooa
复杂点,用bash-libraries的OptionParser

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 14:53
liu滔
用C语言写吧,调用getopt函数

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 19:02
mswwjick
用case就可以了

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-18 22:05
自由建客
/etc/init.d/* 很典型的例子!

Re: 怎么向linux脚本传递参数

发表于 : 2012-02-19 22:25
cykun555
MaskRay 写了:

代码: 全选

while getopts abc name; do
    echo $name
done
我觉得这个是正确的 :em04