如何在KSH脚本中创建选项

时间:2013-08-06 23:26:37

标签: unix ksh

我正在创建一个KSH接口脚本,它将根据用户输入调用其他脚本。其他脚本是Encrypt and Decrypt。这些脚本中的每一个都接收参数。我之前看过有人在使用“ - ”+脚本名称的第一个字母之前执行脚本。我如何为我的脚本执行此操作?因此,例如,如果我的脚本被称为菜单,并且用户键入:menu -e *UserID Filename.txt*,脚本将运行,加密脚本将与相关参数一起执行。到目前为止,我的脚本将加密/解密脚本选项作为参数。这是我的剧本:

#!/bin/ksh

#I want this parameter to become an 
action=$1

if [ $1 = "" ]
    then 
    print_message "Parameters not satisfied"

    exit 1 
fi 

#check for action commands

if [ $1 = "encrypt" ]
    then
    dest=$2
    fileName=$3
    ./Escript $dest $fileName
elif [ $1 = "decrypt" ]
    then
    outputF=$2
    encryptedF=$3
    ./Dscript $outputF $encryptedF
else 
    print "Parameters not satisfied. Please enter encrypt or decrypt plus-n arguments"

fi

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

没有任何一种自动方式可以将参数转换为另一个脚本来运行;你正在做的事情就是如何做到这一点。检查参数,并根据内容运行两个不同的脚本。

您可以使用case更好地构建它,并且您可以使用"$@"将后面的参数直接传递到另一个脚本,并使用shift去除第一个参数。类似的东西:

[ $# -ge 1 ] || (echo "Not enough parameters"; exit 1)

command=$1
shift
case $command in
    -e|--encrypt) ./escript "$@" ;;
    -d|--decrypt) ./dscript "$@" ;;
    *) echo "Unknown option $command"; exit 1 ;;
esac

这也演示了如何通过在单个case语句(-e--encrypt)中提供两个不同的字符串来实现短期和长期选项,以防这就是你要求的关于。你也可以使用整数,例如-e*)来允许任何以-e开头的选项,例如-e-encrypt-elephant,尽管这可能不是你的意思正在寻找。