1

割り当てを実行しようとするとエラーが発生します。

#!/bin/bash
## Assignment 2

echo Please enter a User Name:
read u
if [ $u!="root"]; then
        echo Searching for Username!
        grep $u /etc/passwd|sed 's/$u/hidden/gi'
elif [ $u!="toor"]; then
        echo Root is NOT allowed.
else
        echo Toor is definetely NOT allowed.
fi

出力:

Please enter a User Name:
user1
./assign2.sh: line 6: [bthiessen: command not found
./assign2.sh: line 9: [bthiessen: command not found
Toor is definetely NOT allowed.

私のifステートメントの何が問題になっていますか?

4

4 に答える 4

4

それを試してください:

#!/bin/bash

echo Please enter a User Name:
read u
if [[ $u != "root" ]]; then
        echo Searching for Username!
        grep "$u" /etc/passwd | sed "s/$u/hidden/gi"
elif [[ $u != "toor" ]]; then
        echo Root is NOT allowed.
else
        echo Toor is definetely NOT allowed.
fi

問題が見つかりました

  • [ $u!="root"]周りにスペースが必要!=
  • sedで変数を使用する場合"は、単純ではなく引用符が必要です'

[[[コマンドに似た(ただし、より強力な)bashキーワードです。http://mywiki.wooledge.org/BashFAQ/031およびhttp://mywiki.wooledge.org/BashGuide/TestsAndConditionalsを参照してください。POSIX shのために書いているのでない限り、私たちはお勧めします[[

'and"と`の違いを学びましょう。http://mywiki.wooledge.org/Quotesおよびhttp://wiki.bash-hackers.org/syntax/wordsを参照してください。

于 2012-10-17T23:34:21.693 に答える
2

ここで空白が重要です:

if [[ $u!="root" ]]; then

と:

elif [[ $u!="toor" ]]; then

[[また、よりも好む[

于 2012-10-17T23:34:19.213 に答える
1
if [ $u!="root"]; then
elif [ $u!="toor"]; then

角かっこ内と!=演算子の周囲にスペースが必要です。空白が必要です。"$u"ユーザー名にスペースが含まれている場合や空白の場合は、引用符で囲むこともお勧めします。

if [ "$u" != "root" ]; then
elif [ "$u" != "toor" ]; then

スクリプトには他にも問題がありますが、見つけるのはあなたに任せるべきだと思います。

于 2012-10-17T23:39:54.043 に答える
1

bashスクリプトをデバッグするにはbash -x、およびを使用することもできset -xます。

bash -x script.shデバッグメッセージを含む既存のスクリプトを実行すると、実行前に行がエコーされます。

これによりset -x、シェルスクリプトでこの動作を直接有効にできます。たとえば、シバンの後の最初の行で有効にできます。echo on(これは、Windowsスクリプトのようなものです。)set +xこのオプションを無効にします。

ほとんど有用ではありませんがset -x、インタラクティブシェルで行うことも可能です。

これはすべて、 Bashスクリプトのデバッグの下にある初心者向けのBashガイドでうまく説明されています。

于 2013-09-09T20:45:43.167 に答える