Пользовательский запрос / ввод сценария оболочки
Вопрос
Это грубый скрипт оболочки korn, который кто-то написал. Я не знаю много об использовании синтаксиса оболочки, и я даже не уверен, возможно ли это.
Можно ли как-нибудь запустить этот файл и получить указание даты, чтобы мне не приходилось вручную заходить в скрипт и каждый раз менять его?
Например, я хочу заменить " 1/12/09 " с переменной, взятой из приглашения пользователя.
#!/bin/ksh
./clear_old
./rooms_xls.pl 1/12/09
cd doors
./doors_xls.pl 1/12/09
Решение
Если вы хотите получить приглашение (в отличие от передачи даты в качестве параметра), используйте следующую логику (или что-то подобное):
date=
while [ -z $date ]
do
echo -n 'Date? '
read date
done
Этот цикл будет продолжать запрашивать дату, пока пользователь не введет что-либо (что-либо), кроме простого ВОЗВРАТА.
Если вы хотите добавить простую проверку и используете версию KSH это KSH93 или лучше, сделайте что-то вроде этого:
date=
while [ -z $date ]
do
echo -n 'Date? '
read date
if [[ $date =~ ^[0-9]{1,2}/[0-9]{1,2}/[0-9]{1,4}$ ]]
then
break
fi
date=
done
См. справочную страницу ksh93 для получения дополнительной информации.
Другие советы
В общем случае из командной строки сценария оболочки можно получить доступ к следующим параметрам:
./room_xls.pl $1
, $1, ... $N
Таким образом, вы можете заменить жестко закодированную дату следующим образом:
./myscript 1/12/09
И запусти его как
<*>$ 1 - это первый аргумент командной строки. Это идет до 9 долларов. Посмотрите это учебное пособие , чтобы получить более простой синтаксис ksh.