セキュリティ保護用の質問を取得できない場合にユーザーをログアウトするBashスクリプトを作成しようとしています。
これを反映する条件として、配列または複数のif条件を見つける必要があります。オーバーライド入力(CTRL + Zなど)を停止するなど、多くのサブ要素があることを私は知っています。
以下は私がこれまでに持っているスクリプトです、そして私は以下のエラーを受け取ります。私は答えを望んでいません、ただ何を探すべきかの方向です。セキュリティの質問を促すことすらしません。この場合、rootユーザーをログアウトするだけです。
./txtscript: line 13: [: =: unary operator expected
#!/bin/bash
echo "What is your name?"
read ISNAME
if [ $ISNAME = "root" ];
then
echo "Nice to meet you, root."
echo "Login as root" | mail -s "Login for root" root
echo "Next for the Security Question! "
fi
echo "What is the codename?"
if [ $codename = "Cole Server" ];
then
echo "Hello, Welcome"
else
echo "Away from me, Not Root"
echo "Unauthorized" | mail -s "INTRUDER ALERT" root
pkill -KILL -u $ISNAME;
fi
*****更新*******
了解しました。その部分を修正しました。これで、スクリプトには次のようになります。
echo「コードネームは何ですか?」[$ CODENAME = "Cole Server"];の場合、CODEAMEを読み取ります。その後
スクリプトを実行すると、「。/txtscript:行14:[:=:単項演算子が必要です」というエラーが表示されます。
14行目は次のとおりです。if[$ CODENAME = "Cole Server"];
一般に、単項演算子の予想されるエラーを実際に説明する優れたWebサイト/記事を見つけられなかったため、それが何を意味するのかわかりません。どんな援助も大歓迎です。
さて、問題はそれ$codename
が記入されていないということです。
したがって、13行目が実行されています。
if [ = "Cole Server" ]; # note: the $codename was expanded to emptiness
スクリプトに記述したいのは次のとおりです。
if [ "$codename" = "Cole Server"];
これは次のように評価されます
if [ "" = "Cole Server"];
これは少なくとも構文的に有効です。あなたはまだ実際にcodename
どこかに割り当てる必要がありますが、それはあなたが現在行っていないことです。
しかし、私はこのアプローチ全体がおそらく間違っていると思います。あなたは彼らにインタラクティブなbashセッションを与えています、そして彼らがそこでできるあらゆる種類のことがあります-Ctrl+Z
それを一時停止するために押すことのように。
これは楽しい小さなゲームとしては問題ありませんが、深刻なセキュリティを実行しようとしている場合は、心配します(:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加