非変数に割り当ててみますか?

非変数に割り当ててみますか?

シェルスクリプト関数で算術演算を使用できます。

function mess
{
   if (( "$1" > 0 )) ; then
      total=$1
   else
      total=100
   fi
   tail -$total /var/adm/messages | more
}

関数argsに対して算術演算を実行しようとしています。

#!/bin/bash
byte="Bytes"
kilo="KB"
mega="MB"
giga="GB"
function bytesToUnites() {
if (( "$1" < 1000 )) 
then
    echo $1" "$byte
elif (( $1 < 1000000 ))
then
    let $1/=1000
    echo $1" "$kilo
fi
}

bytesToUnites 28888

ただし、次のエラーが発生します。

line 12: let: 28888/=1000: attempted assignment to non-variable (error token is "/=1000")
28888 KB

この問題をどのように解決できますか?

ベストアンサー1

問題は、あなたが実行しようとしていることですパラメータの置換最初の位置パラメータ名の前に$

次のような目的を達成できます。

...
elif [ $1 -lt 1000000 ]
then
    arg="$1"
    let arg/=1000
    echo $arg" "$kilo
fi

私が知っている限り、位置パラメータを直接使用することはできません。

let 1/=1000

これは構文エラーだからです。

しかし、エラーメッセージを見ると、$1.Bash28888は浮動小数点演算を実行しないことに注意してください。arg設定が2828.888ではない(28888を整数1000で割った商)ということがわかります。よりこのクールなQ&Aスクリプトで浮動小数点演算を実行する方法について説明します。

おすすめ記事