运行带有或不带选项的shell脚本

时间:2016-12-18 23:30:02

标签: bash

我想运行一个shell脚本,根据命令行提供的选项打印'昨天'或'明天'。如果选项为-y,则输出应为“昨天”,否则为“明天”。另外我想添加选项help -h,它将打印脚本的语法。

我将脚本设为:

#! /bin/bash

h= y=

while getopt :f:vql opt
do
    case $opt in
    y) setday=true
    ;;
    h) tohelp=true
    ;;
    esac
done

shift $((OPTIND - 1))

if [setday=true]
    NAME=$yesterday
else
    NAME=$tomorrow
fi

if [tohelp=true]
    MSG=$'runner [-y]'

echo $NAME
echo $MSG

但是当我运行它时,我只是得到一个无限循环打印

-- opt
-- opt
-- opt
etc

我错了什么?

2 个答案:

答案 0 :(得分:0)

这应该有用。

#!/bin/bash

setday=false
tohelp=false

yesterday="Yesterday"
tomorrow="Tomorrow"

for i in "$@"
do
case $i in
    -y)
        setday=true
        shift
        ;;
    -h)
        tohelp=true
        shift
        ;;
esac
shift
done

if [ $setday = true ]; then
    NAME=$yesterday
else
    NAME=$tomorrow
fi

if [ $tohelp = true ]; then
    MSG='runner [-y]'
fi

echo $NAME
echo $MSG

答案 1 :(得分:0)

@ itachi的答案看起来不错。虽然,如果你想继续使用getopts,这也应该有效:

#! /bin/bash

yesterday="yesterday"
tomorrow="tomorrow"
setday=false
tohelp=false

while getopts "yh" opt
do
    case $opt in
    y)
        setday=true
        ;;
    h)
        tohelp=true
        ;;
    esac
done

shift $((OPTIND - 1))

if $tohelp; then
    echo "runner [-y]"
    exit
elif  $setday; then
    NAME=$yesterday
else
    NAME=$tomorrow
fi

echo $NAME

输出:

$ ./test.sh 
tomorrow
$ ./test.sh -y
yesterday
$ ./test.sh -h
runner [-y]