Shell脚本参数是否存在

时间:2011-04-21 11:47:23

标签: linux shell

我有一个shell脚本,有时用户有时会忘记所需的arg。所以我需要在某种程度上,如果用户已经提供了特定的参数,那么不应该提示用户提供该特定的arg。有人可以帮忙吗?

示例脚本:

#!/bin/sh
if [ $GAME =="" ]
then
    echo Enter path to GAME:
    read GAME
else
    echo $GAME
fi

示例O / P 1:

  

$ ./sd.sh -GAME asdasd
  输入GAME的路径:
  ?ASD

示例O / P 2:

  

$ ./sd.sh
  输入GAME的路径:
  ASD

5 个答案:

答案 0 :(得分:8)

if [ -z "$1" ]; then
    echo "usage: $0 directory"
    exit
fi

答案 1 :(得分:5)

您可以使用$#

检查第一个参数
if [ $# -ne 1 ];then
    read -p "Enter game" GAME
else
    GAME="$1"
fi

$#表示参数数量。此脚本检查参数的数量是否为1.如果要检查第五个参数,请使用$5。如果您真的想要更可靠的东西,可以选择使用getopts。或者支持长选项的GNU getopt

答案 2 :(得分:2)

如果您想使用命名args,请查看getopts。它是为了按名称提取args而制作的。该链接还有如何使用它的示例。

答案 3 :(得分:1)

#!/bin/sh
game=""
usage="usage: $0 -g game"
while getopts ":hg:" option; do
  case "$option" in
    h) echo "$usage"
       exit
       ;;
    g) game="$OPTARG"
       ;;
    ?) echo "illegal option: $OPTARG" >&2
       echo "$usage" >&2
       exit 1
       ;;
  esac
done
[ -z "$game" ] && read -p "enter game: " game

答案 4 :(得分:0)

这是我的shell脚本版本,没有使用可以解决问题的getopts。我使用getopts遇到的问题是将命名参数作为-GAME而不是-g工作,即单个字符。

注意:这里-user和-pass args是针对java的,所以我不需要sh脚本来询问它,因为如果没有提供它们,java会完成这项工作。

#!/bin/sh
game=0
if [ $# -ge 1 ];then
 if [ ${6} = "-GAME" ];then
  game=1
 fi
 if [ $game -ne 1 ];then
  echo "Enter path to GAME location"
  read GAME
 else
  GAME=${7}
 fi
 echo "Game:" $1 ", Game location: " $GAME
else
 echo "usage: ./run.sh gamename"
 echo "usage: ./run.sh gamename [-user] [username] [-pass] [password] [-GAME] [path]"
fi

输出1:

  

./ run.sh COD4 -user abhishek -pass hereiam -GAME / home / games
  游戏:COD4,游戏地点:/ home / games

输出2:

  

./ run.sh COD4
  ./run.sh:line 4:[:=:一元运算符预期
  输入GAME位置的路径
  /家庭/ mygames
  游戏:COD4,游戏地点:/ home / mygames

感谢大家的努力:)