我想通过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
现在我遇到的问题是在if语句中,无论我改变什么,它总是在if中,我试着放 [[ ]]
声明周围但没有。
这是错误:
./p6.sh: line 13: [: : integer expression expected
$ s2=5 s1=4
$ echo $s2 $s1
5 4
$ res= expr $s2 - $s1
1
$ echo $res
第四行实际发生的是那个 res
被设置为空,并出口为 expr
命令。因此,当你跑步 [ "$res" -lt 0 ]
res
正在扩展到什么都没有,你看到错误。
你可以使用一个 算术表达式:
$ (( res=s2-s1 ))
$ echo $res
1
算术上下文保证结果将是一个整数,所以即使你的所有术语都未定义开始,你也会得到一个整数结果(即零)。
$ (( res = whoknows - whocares )); echo $res
0
或者,您可以告诉shell res
通过声明它是一个整数:
$ declare -i res
$ res=s2-s1
这里有趣的是,赋值的右侧在算术上下文中被处理,所以你不需要 $
对于扩展。
你可能会采取 ${var#-}
。
${var#Pattern}
从...除去 $var
最短的部分 $Pattern
匹配前端 $var
。 tdlp
例:
s2=5; s1=4
s3=$((s1-s2))
echo $s3
-1
echo ${s3#-}
1