use*_*550 7 bash shell-script variable
我们可以在 shell 脚本函数中使用算术运算:
function mess
{
if (( "$1" > 0 )) ; then
total=$1
else
total=100
fi
tail -$total /var/adm/messages | more
}
Run Code Online (Sandbox Code Playgroud)
我尝试对函数 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
Run Code Online (Sandbox Code Playgroud)
但我收到此错误:
line 12: let: 28888/=1000: attempted assignment to non-variable (error token is "/=1000")
28888 KB
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
问题是您试图通过在第一个位置参数名称前加上来执行参数替换$
。
你可以像这样完成你想要的:
...
elif [ $1 -lt 1000000 ]
then
arg="$1"
let arg/=1000
echo $arg" "$kilo
fi
Run Code Online (Sandbox Code Playgroud)
据我所知,您不能通过以下方式直接使用位置参数:
let 1/=1000
Run Code Online (Sandbox Code Playgroud)
因为这将是一个语法错误。
顺便说一句,从您的错误消息中,我可以看到$1
设置为28888
. 您应该注意到 Bash 不进行浮点运算。您会发现arg
设置为28
(28888 除以 1000 的整数商)而不是 28.888。请参阅有关如何在脚本中进行浮点运算的精彩问答。
归档时间: |
|
查看次数: |
5474 次 |
最近记录: |