2

ファイルから入力を取得して、ユーザーが特定のプログラムの使用を許可されているかどうかを判断するループを作成しています。

#!/bin/bash

boole=false

echo "Username: "
read username

echo "debug0"

for((line=1; $boole=false; line++)); do
    echo "debug.5"
    auth=`head -n $line users | tail -n $line`

    echo "debug1"

    if [ $username = $auth ]; then
        echo "debug2"
        echo "authentication success"
        read
        exit 0
    fi

    if [ $auth = "#end" ]; then
        echo "debug3"
        echo "authentication failed"
        read
        exit 0
    fi
done

echo "skip everything"

出力は

Username:
admin
debug0
skip everything

ユーザーのファイルには

root
admin
...
#end

#endbooleループを終了するように指示する必要があります

これは単なるデバッグ段階であるため、実際にプログラムを実行するわけではなく、ユーザーが使用を許可されているかどうかを通知するだけです。

4

3 に答える 3

0

bash のループは C ループとは異なります。基本的な構文は次のとおりです。

for arg in [list]
do 
    [command(s)...]
done

ただし、使用しているような C スタイルの構文があります。

for ((x=1; x<=3; x++))
{
    echo $x
}

コメントで述べたように、$boole=false二重括弧内に記述すると、二重括弧の内容が処理される$booleに逆参照されるため、 になります。さらに、何かを二重括弧で囲む場合は、比較に使用する必要があります。いずれにせよ、またはである場合、最初のものは に正常に割り当てられ、2 つ目は aが true であるため true になるため、どちらも true になります。false=false==$boole=false$boole==falsefalsefalsefalse==false

とにかく、あなたの場合、おそらくwhileループを使用します。次に例を示します。

bool=true
int=1
while $bool; do
    echo $int
    (( int++ ))
    if [[ $int == 10 ]]; then
        bool=false
    fi
done
echo $int
于 2013-06-10T19:16:45.670 に答える