シェルスクリプト関数で算術演算を使用できます。
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
設定が28
28.888ではない(28888を整数1000で割った商)ということがわかります。よりこのクールなQ&Aスクリプトで浮動小数点演算を実行する方法について説明します。