2010-09-12 2 views
1

Я пытаюсь написать профессиональную программу для приема и обработки ввода через систему на основе меню. У программы не должно быть аргументов командной строки. он будет записан в csh-скрипте под названием TaskMenu. Этот сценарий оболочки будет:csh scripting для авторизации пароля пользователя

  1. запросить у пользователя пароль.
    a. Если пароль неверен, система выйдет из с соответствующим сообщением об ошибке.
  2. отображает текстовое меню, а затем получает ответ от пользователя.
  3. обрабатывает ввод пользователя и повторно отображает текстовое меню , пока пользователь не захочет выйти.
+0

P.S. Я не знаю, как записать его в сценарии csh – GuzzyD

ответ

4

Чтобы прочитать пароль, выключите эхо, прочитайте пароль, затем снова включите эхо. CSH:

stty -echo 
echo -n "Enter password: " 
set password = $< 
stty echo 

Чтобы создать меню, просто эхо выбор на экране, а затем прочитать значение обратно. CSH:

echo 1 first item 
echo 2 second item 
echo 3 third ... 
echo -n "Enter Choice: " 
set choice = $< 

Эти же две задачи в Баш являются:

Читайте пароль:

echo -n "Enter password: " 
read -s password 

меню Make:

select choice in "first item" "second item" "third..." do 
test -n "$choice" && break; 
done 

Обратите внимание, как чтение пароля и сделать меню встроены в bash. Помимо того, что некоторые простые вещи, сделанные в сценариях, невозможны в csh. Csh не предназначен как язык сценариев. Гораздо проще использовать Bash, Python, Ruby, Perl или даже низко /bin/sh для написания скриптов на нескольких строках.

Тем не менее, здесь есть полный CSH сценарий, показывающий методы паролей и меню:

#! /bin/csh 

set PW="ok" 

### Read Password 
echo -n "enter passwd: " 
stty -echo 
set passwd = $< 
stty echo 

if ("$passwd" == "$PW") then 
     echo Allrighty then! 
else 
    echo "Try again. Use '${PW}'." 
    exit 1 
endif 


### Menu 
@ i = 1 
set items = (one two three four five six seven) 
foreach item ($items[*]) 
    echo "${i}) $item" 
    @ i = $i + 1 
end 
set choice = 0 
while ($choice < 1 || $choice > $#items) 
    echo -n "Select: " 
    set choice = $< 
end 
echo "You chose ${choice}: $items[$choice]" 

Примечание

Хотя популярные для интерактивного использования из-за его многочисленные инновационных функций, csh никогда не был таким, как популярный для сценариев [1]

1Wikipedia

1

Q: Почему, черт возьми, кто хотел бы использовать CSH в мире Баш;) CSH тааак 1985;)

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