2017-10-05 18 views
1

shell scriptでコードを書くのがまったく新しいです。Bashシェルスクリプトエラー:あいまいなリダイレクトと単項演算子が予想される

これは私のコードです:

#!/bin/bash 
echo -n "Output to $2 " 
# set counter 
count=1 
# zap output file 
> $2 
# Loop 
while [ $count -le $1 ] 
do 
    # generate some random text 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    randomtext=`cat /dev/urandom | tr -cd "[:alnum:]" | head -c $randomnumber` 
    # generate a random number 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    # output to file 
    echo "$count,$randomtext,$randomnumber" | sed -e "s: *::g" >> $2 
    # increment counter 
    count=$(($count + 1)) 
    if [ $(($count % 500)) -eq 0 ] 
    then 
echo -n "." fi 
done 
echo " Output complete" 

そして、これは私のエラーです:

Line 2: ambiguous redirect and Line 14: unary operator expected. 

誰もが、私はそのエラーを持つ理由を私は理解するのに役立つことはできますか?

+1

行番号がコードと一致しません。正してください。 –

+1

ユーザー入力を検証する必要があるようです。 2つの議論が提供されていますか? –

+1

注意:[bash/POSIXシェルで変数を引用するのを忘れることのセキュリティ上の意味](https://unix.stackexchange.com/q/171346/4667) –

答えて

1

@GlennJackmanが指摘するように、ラインは、それゆえ私は、次の推測しています、コードが一致していません。

  • あいまいなリダイレクトは6行目にあります。ファイルを切り捨てるには、あなたが truncate -s0 $2
  • を使用する必要があります単項演算子のエラーのために
  • が、私は21行に賭ける:どちらか改行 または以下を試してみてくださいfi

の前にセミコロン;を置く:

#!/bin/bash 
echo -n "Output to $2 " 
# set counter 
count=1 
# zap output file 
truncate -s0 $2 
# Loop 
while [ $count -le $1 ] 
do 
    # generate some random text 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    randomtext=`cat /dev/urandom | tr -cd "[:alnum:]" | head -c $randomnumber` 
    # generate a random number 
    randomnumber=`od -A n -t d -N 1 /dev/urandom` 
    # output to file 
    echo "$count,$randomtext,$randomnumber" | sed -e "s: *::g" >> $2 
    # increment counter 
    count=$(($count + 1)) 
    if [ $(($count % 500)) -eq 0 ] 
    then 
     echo -n "." 
    fi 
done 
echo " Output complete" 
関連する問題