Absolute value of a number

别来无恙 提交于 2020-05-28 12:05:25

问题


I want to take the absolute of a number by the following code in bash:

#!/bin/bash
echo "Enter the first file name: "
read first

echo "Enter the second file name: "
read second

s1=$(stat --format=%s "$first")
s2=$(stat -c '%s' "$second")

res= expr $s2 - $s1

if [ "$res" -lt 0 ]
then
        res=$res \* -1
fi

echo $res

Now the problem I am facing is in the if statement, no matter what I changes it always goes in the if, I tried to put [[ ]] around the statement but nothing.

Here is the error:

./p6.sh: line 13: [: : integer expression expected

回答1:


$ s2=5 s1=4
$ echo $s2 $s1
5 4
$ res= expr $s2 - $s1
1
$ echo $res

What's actually happening on the fourth line is that res is being set to nothing and exported for the expr command. Thus, when you run [ "$res" -lt 0 ] res is expanding to nothing and you see the error.

You could just use an arithmetic expression:

$ (( res=s2-s1 ))
$ echo $res
1

Arithmetic context guarantees the result will be an integer, so even if all your terms are undefined to begin with, you will get an integer result (namely zero).

$ (( res = whoknows - whocares )); echo $res
0

Alternatively, you can tell the shell that res is an integer by declaring it as such:

$ declare -i res
$ res=s2-s1

The interesting thing here is that the right hand side of an assignment is treated in arithmetic context, so you don't need the $ for the expansions.




回答2:


You might just take ${var#-}.

${var#Pattern} Remove from $var the shortest part of $Pattern that matches the front end of $var. tdlp


Example:

s2=5; s1=4
s3=$((s1-s2))

echo $s3
-1

echo ${s3#-}
1



回答3:


I know this thread is WAY old at this point, but I wanted to share a function I wrote that could help with this:

abs() { 
    [[ $[ $@ ] -lt 0 ]] && echo "$[ ($@) * -1 ]" || echo "$[ $@ ]"
}

This will take any mathematical/numeric expression as an argument and return the absolute value. For instance: abs -4 => 4 or abs 5-8 => 3



来源:https://stackoverflow.com/questions/29223313/absolute-value-of-a-number

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!