如何在Bash脚本中传递两个参数或参数

7
我是新手,需要你的帮助解决这个问题。我有一个bash脚本"start.sh"。我想编写一个带有两个参数的脚本,以便我可以按以下方式运行脚本:
./start.sh -dayoffset 1 -processMode true dayoffset和processMode是我必须脚本化的两个参数。
dayoffset = 1是报告日期(今天) processMode = true或false
1个回答

13

作为一个开始,你可以这样做:

#!/bin/bash
dayoffset=$1
processMode=$2
echo "Do something with $dayoffset and $processMode."

使用:

./start.sh 1 true
另一个:
#!/bin/bash

while [[ $# -gt 0 ]]; do
    case "$1" in
    -dayoffset)
        day_offset=$2
        shift
        ;;
    -processMode)
        if [[ $2 != true && $2 != false ]]; then
            echo "Option argument to '-processMode' can only be 'true' or 'false'."
            exit 1
        fi
        process_mode=$2
        shift
        ;;
    *)
        echo "Invalid argument: $1"
        exit 1
    esac
    shift
done

echo "Do something with $day_offset and $process_mode."

使用方法:

./start.sh -dayoffset 1 -processMode true

使用日期偏移量进行示例参数解析:

#!/bin/bash 
dayoffset=$1
date -d "now + $dayoffset days"

测试:

$ bash script.sh 0
Fri Aug 15 09:44:42 UTC 2014
$ bash script.sh 5
Wed Aug 20 09:44:43 UTC 2014

嗨,感谢回复。我的脚本大致如下。它有任何意义吗? code if [ $# -eq 3 ]; then if [ -z "$1" ]; then DAY_OFFSET="-1" else DAY_OFFSET="$1" fi if [ -n "$2" ] && [ $2 = "repeat" ]; then echo "Wiederholungslauf" PARAMETERS="${PARAMETERS} -processMode true" else echo "Default" PARAMETERS="${PARAMETERS} -processMode false" fi else echo "Wrong count of paramaeters given" batch_exit fi code - user1983063
非常感谢。它对我有用 :) - user1983063
1
@user1983063,你的版本不够动态。我建议你使用我给出的通用形式。实际上,我更喜欢全大写的变量名,所以你能把这些变量改成全大写吗?只是要小心使用内置的shell变量...不客气 :) - konsolebox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接