1

メニューベースのシステムを介して入力を受け入れて処理するための専門的なプログラムを作成しようとしています。プログラムには、コマンド ライン引数を指定しないでください。それは TaskMenu と呼ばれる csh スクリプトに書き込まれます。このシェル スクリプトは次のことを行います。

  1. ユーザーにパスワードを要求します。
    a. パスワードが正しくない場合、システムは適切なエラー メッセージで終了します。
  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 での同じ 2 つのタスクは次のとおりです。

パスワードの読み取り:

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

Q: 一体なぜ、bash の世界で csh を使いたいと思う人がいるのですか ;) csh は 1985 年版です ;)

于 2010-12-04T20:41:33.900 に答える