我有一个只包含一个大号的文件。我需要将这个数字保存在整数变量中,以便在数学运算中使用它。
我尝试过:var=$(<filename)
但它将其保存为字符串。
答案 0 :(得分:1)
常见的shellscript(bash,sh)中没有整数变量 - 所有变量都是字符串或数组。所以只需正常使用变量:
$ echo 2 > test
$ X=$(< test)
$ Y=$(($X + 2))
$ echo $Y
4
答案 1 :(得分:0)
如果我了解您正在尝试从文件中读取值并检查它是否为素数,则问题不在于文件中的值。问题是你的shell语法。从您的问题和评论开始,看起来您正在尝试执行以下操作:
#!/bin/sh
num=$(<"$1")
i=2
f=0
while [ $i -le $(expr $num / 2) ]; do
if [ $(expr $num % $i) -eq 0 ]; then
f=1
fi
i=$(expr $i + 1)
done
if [ $f -eq 1 ]; then
echo "The number is composite"
else
echo "The number is Prime"
fi
使用/输出强>
$ cat dat/pnumber.txt
31
$ sh prime.sh dat/pnumber.txt
The number is Prime
$cat dat/npnumber.txt
32
$ sh prime.sh dat/npnumber.txt
The number is composite
问题是你没有意识到expr
是一个单独的命令,必须用反引号或$()
括起来将表达式的值返回给变量或在测试结构中使用它。
如果您更愿意使用旧的反引号命令替换语法,则以下内容与上面显示的内容相同:
while [ $i -le `expr $num / 2` ]; do
if [ `expr $num % $i` -eq 0 ]; then
f=1
fi
i=`expr $i + 1`
done