2

3 つのディレクトリのいずれかに保持されているデータがあり、ユーザーがデータに簡単にアクセスできるようにするループを作成したいと考えていました。

誰かが 1 ~ 3 を入力すると、数値が読み取られ、変数 timePeriod が「daily」、「bars10s」、または「bars100ms」に変更されるように、このループを機能させようとしています。コードを実行して問題がないかどうかを確認するために timeCheck 変数と timePeriod 変数をエコーすると、timeCheck は常に正しく返されますが、timeCheck 変数が何を読み取っても、timePeriod は「毎日」読み取られます。私はbashにかなり慣れていないので、助けていただければ幸いです。

#!/bin/bash

echo 

timePeriod=""
timeCheck=0

read -p "Time Period for fac to run(press 1 for daily, 2 for 10 sec 
intervals, 3 for 100ms intervals): " -e -i "$timeCheck" timeCheck

if [ $TimeCheck==1 ] ; then
    timePeriod="daily"
elif [ $TimeCheck==2 ] ; then
    timePeriod="bars10s"    
elif [ $TimeCheck==3 ] ; then
    timePeriod="bars100ms"
else
    echo "Not Valid Time Period. Please re-try."
fi


echo $timeCheck
echo $timePeriod
4

3 に答える 3

3

selectこのようなメニューには - を使用できます。

PS3="Select what you want>"
select answer in "Daily period" "10 sec period" "100 ms" "exit program"
do
case "$REPLY" in
    1) timePeriod="daily" ; break;;
    2) timePeriod="10s" ; break;;
    3) timePeriod="100ms" ; break;;
    4) exit ;;
esac
done

echo "$timePeriod"
于 2013-05-03T14:02:53.953 に答える
2

条件とブール演算子の前後にスペースを入れる必要があります。

if [ $TimeCheck == 1 ] ; then

ただし、算数のテストなので、次のようにした方がよい場合があります。

if (( $TimeCheck==1 )) ; then

算術チェックでは、スペースはそれほど重要ではありません。

于 2013-05-03T13:55:31.257 に答える