2015-04-10 2 views
0

У меня есть файл, который содержит только одно большое число. Мне нужно сохранить это число в целочисленной переменной, чтобы использовать его в математических операциях.Чтение числа из файла в скрипте оболочки

Я пробовал: var=$(<filename), но это сохраняет его как строку.

+0

Я не понимаю, в чем проблема. Одна вещь, которую вы можете сделать, это 'declare -i var = $ (<файл)' (предположим bash), но это не принесет вам многого. –

+0

Я пробовал это, но это не сработало. Мне нужно проверить, является ли число простым и некоторыми другими операциями, поэтому мне нужно иметь его как целое, поэтому я могу сделать «$ var + 2» в качестве простейшего случая. – Rayya

+0

И что вы пробовали, что не работает? –

ответ

1

Не существует целочисленных переменных в общем shellscript (bash, sh) - все переменные являются либо строками, либо массивами. Так просто использовать переменную обычно:

$ echo 2 > test 
$ X=$(< test) 
$ Y=$(($X + 2)) 
$ echo $Y 
4 
+0

Мне нужно использовать его внутри нового var не внутри «echo» .. когда я использую внутри этого кода, чтобы проверить, является ли он простым или нет, он останавливается на «expr», потому что это строка, даже если я написал ее как $ (($ var/2)), например = 2 е = 0 в то время как [$ я -le 'выражение $ Num/2'] сделать , если [' выражение $ NUM% $ i' -eq 0] затем е = 1 фи я = 'выражение $ I + 1 ' сделано , если [$ F -eq 1] затем эхо "число составное" еще эхо "Номер Prime" fi – Rayya

+0

Эхо или вар не имеет значения. Я просто обновил пример, чтобы показать, как его использовать в var. Я не могу прочитать ваш образец кода, поскольку он потерял все форматирование, но ваша проблема должна быть в другом месте. – theamk

0

Если я понимаю, что вы пытаетесь прочитать значение из файла и проверить, является ли оно простым или нет, ваша проблема не значение в файле. Проблема заключается в синтаксисе вашей оболочки. После вместе с вашими вопросами и комментариями, похоже, что вы пытаетесь сделать следующее:

#!/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 
Смежные вопросы