1

我正在尝试编写一个专业程序来通过基于菜单的系统接受和处理输入。该程序不应有命令行参数。它将被写入名为 TaskMenu 的 csh 脚本中。这个 shell 脚本将:

  1. 要求用户输入密码。
    一种。如果密码不正确,系统将退出并显示相应的错误消息。
  2. 显示一个文本菜单,然后得到用户的响应。
  3. 处理用户输入并重新显示文本菜单,直到用户想要退出。
4

2 回答 2

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 = $<

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 维基百科

于 2010-09-30T01:16:22.163 回答
1

问:为什么会有人想在 bash 世界中使用 csh ;) csh 是 Soooo 1985 ;)

于 2010-12-04T20:41:33.900 回答