скрипт csh для авторизации пользователя по паролю

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

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

person GuzzyD    schedule 12.09.2010    source источник
comment
P.S. я не знаю, как написать это в сценарии csh   -  person GuzzyD    schedule 12.09.2010


Ответы (2)


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

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

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

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

Эти же две задачи в bash:

Прочитать пароль:

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

Сделать меню:

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].

1 Википедия

person frayser    schedule 30.09.2010

В: Какого черта кому-то захочется использовать csh в мире bash ;) csh - тааак 1985 года ;)

person paulsm4    schedule 04.12.2010