1

我正在创建一个 KSH 接口脚本,它将根据用户输入调用其他脚本。其他脚本是加密和解密。这些脚本中的每一个都接收参数。我见过有人在使用“-”+脚本名称的第一个字母之前执行脚本。如何为我的脚本执行此操作?因此,例如,如果我的脚本被称为 menu 并且用户输入 :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

谢谢您的帮助!

4

1 回答 1

1

没有任何一种自动方法可以将参数转换为另一个脚本来运行;你正在做的几乎就是你会怎么做。检查参数,并根据内容运行两个不同的脚本。

您可以使用 更好地构造它case,并且可以使用 将后面的参数直接传递给另一个脚本"$@",并使用 ashift去除第一个参数。就像是:

[ $# -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) 中提供两个不同的字符串来匹配来实现短选项和长选项,以防万一你问的是什么。您也可以使用 glob,例如允许任何以, ,-e*)开头的选项,尽管这可能不是您想要的。-e-e-encrypt-elephant

于 2013-08-07T00:33:18.480 回答