Если я понимаю, что вы пытаетесь прочитать значение из файла и проверить, является ли оно простым или нет, ваша проблема не значение в файле. Проблема заключается в синтаксисе вашей оболочки. После вместе с вашими вопросами и комментариями, похоже, что вы пытаетесь сделать следующее:
#!/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
Я не понимаю, в чем проблема. Одна вещь, которую вы можете сделать, это 'declare -i var = $ (<файл)' (предположим bash), но это не принесет вам многого. –
Я пробовал это, но это не сработало. Мне нужно проверить, является ли число простым и некоторыми другими операциями, поэтому мне нужно иметь его как целое, поэтому я могу сделать «$ var + 2» в качестве простейшего случая. – Rayya
И что вы пробовали, что не работает? –