从shell脚本中读取文件中的数字

时间:2015-04-10 19:01:13

标签: shell

我有一个只包含一个大号的文件。我需要将这个数字保存在整数变量中,以便在数学运算中使用它。

我尝试过:var=$(<filename)但它将其保存为字符串。

2 个答案:

答案 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