怎么向linux脚本传递参数

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
头像
NewUserFF
帖子: 413
注册时间: 2010-11-19 22:55

怎么向linux脚本传递参数

#1

帖子 NewUserFF » 2012-02-18 9:21

比如说我有一个脚本,名为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怎么办?怎么才能智能检测选项的内容?
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

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

#2

帖子 枫叶饭团 » 2012-02-18 9:24

用for循坏检测
头像
ljj_jjl2008
论坛版主
帖子: 14256
注册时间: 2007-09-16 8:29

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

#3

帖子 ljj_jjl2008 » 2012-02-18 9:24

好像需要你自己写if语句判断。
没有好法。
头像
NewUserFF
帖子: 413
注册时间: 2010-11-19 22:55

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

#4

帖子 NewUserFF » 2012-02-18 9:40

晕,不会 吧,shell又一次让我失望了 :em20
MaskRay
帖子: 61
注册时间: 2010-04-29 22:00
系统: Gentoo Linux ~amd64
联系:

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

#5

帖子 MaskRay » 2012-02-18 10:44

代码: 全选

while getopts abc name; do
    echo $name
done
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

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

#6

帖子 tusooa » 2012-02-18 14:06

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

代码: 全选

] ls -ld //
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

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

#7

帖子 tusooa » 2012-02-18 14:07

复杂点,用bash-libraries的OptionParser

代码: 全选

] ls -ld //
头像
liu滔
帖子: 7214
注册时间: 2010-10-09 23:01

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

#8

帖子 liu滔 » 2012-02-18 14:53

用C语言写吧,调用getopt函数
头像
mswwjick
帖子: 645
注册时间: 2009-01-28 21:42

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

#9

帖子 mswwjick » 2012-02-18 19:02

用case就可以了
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

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

#10

帖子 自由建客 » 2012-02-18 22:05

/etc/init.d/* 很典型的例子!
cykun555
帖子: 4
注册时间: 2011-04-26 22:23

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

#11

帖子 cykun555 » 2012-02-19 22:25

MaskRay 写了:

代码: 全选

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