2013-08-06 2 views
1

Я создаю скрипт интерфейса KSH, который будет вызывать другие скрипты на основе ввода пользователей. Другие скрипты - Шифрование и Расшифровка. Каждый из этих сценариев получает параметры. Я видел, как кто-то выполнил скрипт перед тем, как использовать первую букву имени «-» + имени скрипта. Как это сделать для моего скрипта? Так, например, если мой скрипт называется меню и пользователь вводит: menu -e *UserID Filename.txt*, скрипт будет запускаться, и скрипт шифрования будет выполняться вместе с соответствующими параметрами. Пока мой сценарий принимает параметр шифрования/расшифровки скрипта в качестве параметра. Вот мой сценарий:Как создать параметры в скрипте KSH

#!/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 

Спасибо за помощь!

+0

+1 для хорошего вопроса, показывая некоторые мысли с вашей стороны. Мне кажется, что это так. В то время как 'getargs' является обычным методом для обработки опций с префиксами' -', вы не можете просто проверить 'if [$ 1 =" -encrypt "]; то «... и т. д.? Удачи. – shellter

ответ

1

Существует не какой-либо автоматический способ превратить параметр в другой скрипт для запуска; что вы делаете, в значительной степени, как вы это сделаете. Проверьте параметр и на основе содержимого запустите два разных сценария.

Вы можете структурировать это несколько более красиво, используя case, и вы можете передать позже параметры непосредственно через к другому сценарию, используя "[email protected]" с shift сдирать первый параметр. Что-то вроде:

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

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

Это также показывает, как можно реализовать как короткие, так и длинные варианты, предоставляя две разные строки, чтобы соответствовать против в едином сазе (-e и --encrypt), в случае, если это то, что вы спрашивали о , Вы также можете использовать глобусы, например -e*), чтобы разрешить любую возможность, начиная с -e, например -e, -encrypt, -elephant, хотя это может и не быть тем, что вы ищете.

Смежные вопросы