shell脚本 自定义传入参数选项

在使用现有的如grep、awk等shell命令时,我们发现都会有一种形式,-r 参数,其实这种形式在我们自己编写的脚本中也可以定义

主要有三种方式处理命令行参数,

1、手工处理方式

2、getopts

3、getopt

1、手工处理方式:

用这种方式时,需要自己知道第几个参数对应的是什么变量,使用位置来取参数,如下所示:

<span style="font-family:SimSun;font-size:14px;">$0: 命令本身的名称
$1: 第一个参数
$2:依次类推,第2个参数
$#:参数的个数,不包括命令本身的名称
$@:参数列表,不包括命令本身的名称
$*:和$@相同,但注意"$*"和"$@"并不同,“$*"将所有的参数解释成一个字符串,而"$@"是一个参数数组
</span>
2、使用getopts,示例如下:

<span style="font-family:SimSun;font-size:14px;">while getopts :f:d:ck: OPTION
do
    case $OPTION in
        f)                       
            dir_str=$OPTARG
            ;;
        d)
            date_time=$OPTARG
            ;;
        k)
            key_word=$OPTARG        #$OPTARG为特殊变量,表示选项的具体参数
            ;;
        m)  
            whole_month=y
            ;;
        \?)                       #如果出现错误,则解析为?
            echo "error params $OPTARG"
            ;;
    esac
done</span>
其中,$OPTARG表示的取传进来的值

while getopts后面,f后面跟着冒号:表示该参数f接收传入参数 即-f 参数, c后面没有跟着冒号,表示该参数c不接收传入参数 即输入-c 就表示c对应的变量为y(或者为n,看自己如何定义了)

3、使用getopt,示例如下:

<span style="font-family:SimSun;font-size:14px;">set -- `getopt acdhimwe:fo "$@"`                              #set -- 重新组织$1 等参数
while  [ -n "$1" ]
do
    echo "\$1 is $1"
    case $1 in
        -a)
            make_arch
            ;;
        -c)
            make_clean
            ;;
        -d)
            make_decoder
            ;;
        -h)
            build_help
            ;;
        -i)
            make_decoder_image
            ;;
        -m)
            move_bin
            ;;
        -w)
            build_welcom
            ;;
        --)
            shift
            break
            ;;
        -o)
            echo "find -o option"
            ;;
        -f)
            echo "find -f option"
            ;;
        -e)
            echo "find -e option with param $2"
            shift
            ;;
        *)
            echo $1
            echo "unknow option"
    esac
    shift
done</span>
getopts与getopt的区别:

1. getopts是bash内建命令的, 而getopt是外部命令
2. getopts不支持长选项, 比如: --date
3. 在使用getopt的时候, 每处理完一个位置参数后都需要自己shift来跳到下一个位置, getopts只需要在最后使用shift $(($OPTIND - 1))来跳到parameter的位置。
4. 使用getopt时, 在命令行输入的位置参数是什么, 在getopt中需要保持原样, 比如 -t , 在getopt的case语句中也要使用-t,  而getopts中不要前面的-。
5. getopt往往需要跟set配合使用
6. getopt -o的选项注意一下

7. getopts 使用语法简单,getopt 使用语法较复杂

8. getopts 不会重排所有参数的顺序,getopt 会重排参数顺序

9. getopts 出现的目的是为了代替 getopt 较快捷的执行参数分析工作


### 回答1: 在shell脚本中,可以使用特殊变量$1,$2,$3...来获取传递给脚本参数。其中$1表示第一个参数,$2表示第二个参数,以此类推。例如,以下是一个简单的示例脚本,用于获取两个参数并将它们相加: ```shell #!/bin/bash num1=$1 num2=$2 sum=$((num1 + num2)) echo "The sum of $num1 and $num2 is: $sum" ``` 在执行此脚本时,需要在命令行中传递两个数字作为参数,例如: ```shell $ ./script.sh 2 3 The sum of 2 and 3 is: 5 ``` 在上面的示例中,$1和$2分别获取了命令行中传递的第一个和第二个参数,并将它们相加后输出了结果。 ### 回答2: 在shell脚本中,我们可以通过使用特殊变量来获取参数。这些特殊变量包括$0、$1、$2等。其中,$0代表脚本本身的名称,$1代表第一个参数,$2代表第二个参数,以此类推。 我们可以通过在脚本中使用这些特殊变量来获取命令行中传入参数。例如,如果我们运行脚本如下: ```shell ./script.sh arg1 arg2 ``` 在脚本中,我们可以通过$1和$2来分别获取arg1和arg2的值。我们可以使用这些参数进行各种操作和计算。下面是一个简单的示例: ```shell #!/bin/bash echo "第一个参数为:$1" echo "第二个参数为:$2" result=$(($1 + $2)) echo "计算结果为:$result" ``` 当我们运行这个脚本时,会输出如下结果: ``` 第一个参数为:arg1 第二个参数为:arg2 计算结果为:arg1arg2 ``` 在这个例子中,我们通过$1和$2获取了传入参数,然后使用这些参数进行了加法运算,并输出了计算结果。 总结起来,使用特殊变量$1、$2等可以轻松获取脚本传入参数,使得我们可以根据参数进行各种自定义操作。 ### 回答3: Shell脚本是一种用于执行一系列命令的脚本语言,它可以通过不同的方式来获取参数。 一种常见的方式是通过特殊变量"$1"、"$2"等来获取命令行传入参数。其中,"$0"代表脚本本身的名称,"$1"代表第一个参数,"$2"代表第二个参数,以此类推。例如,如果我们运行"sh myscript.sh hello world",在脚本中可以使用"$1"获取到"hello",使用"$2"获取到"world"。 另一种方式是使用命令行选项来获取参数。可以使用getopt命令或者使用内置的特殊变量"$OPTARG"来获取选项参数。getopt命令可以帮助解析命令行选项并将其存储在特殊变量中。使用这种方式可以为命令行传入参数添加更多的灵活性和可扩展性。 除了上述方法外,还可以使用环境变量来获取参数。环境变量是一种特殊的变量,它们在整个系统中可见。通过设置环境变量,我们可以在脚本中获取到需要的参数。 总之,Shell脚本可以通过特殊变量、命令行选项和环境变量等方式获取参数。这些方式可以根据具体的需求和场景进行选择和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值