"bash:[::予想整数式" [閉じる]

コマンドライン引数なしで、この関数はランダムな単語を返したいと思います。

#$-ne 1でも動作するようにlinuxconfig.orgのランダムワードジェネレータを修正しています。

function random-word {
    if [ $# -eq 0 ] ;
    then 
        echo "I only take one argument, dummy"
        # previously was exit 0
    fi

    # Constants 
    X=0
    ALL_NON_RANDOM_WORDS=/usr/share/dict/words

    # total number of non-random words available 
    non_random_words=`cat $ALL_NON_RANDOM_WORDS | wc -l` 

    # while loop to generate random words  
    # number of random generated words depends on supplied argument 
    while [ $X -lt "$1" ] 
    do 
    random_number=`od -N3 -An -i /dev/urandom | 
    awk -v f=0 -v r="$non_random_words" '{printf "%i\n", f + r * $1 / 16777216}'` 
    sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS 
      let "X = X + 1" 
    done

文が実行されますが、bashエラーが発生します。

$ bob
I only take one argument, dummy
bash: [: : integer expression expected

bashエラーが表示されないようにするにはどうすればよいですか?

ベストアンサー1

while [ $X -lt "$1" ]1ドルも評価されません。

これが発生しないように、残りのコードをelseブロックに移動してください。

function random-word {
    # from linuxconfig.org 

    if [ $# -eq 0 ] 
    then 
        echo "I need an argument, dummy"
        # To be extra friendly, give them a random word.
        echo "Here's a random word:"
        random-word 1
    else
        # Constants 
        X=0

         ...

        sed `echo $random_number`"q;d" $ALL_NON_RANDOM_WORDS 
          let "X = X + 1" 
        done
    fi
}

おすすめ記事