Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Shell Script Calculator

Featured Replies

Здравейте, трябва да направя калкулатор на shell script, но ми дава следната грешка. Искам да продължа да използвам калкулатора след първото изчисление:

c.sh: 3: c.sh: i: not found
 

Това е моят код:

==========================================================================

#Calculator

i = "yes"
while [ $i="yes" ]
do

echo What operation would you like to perform: 
echo ============================
echo 1: Addition, 
echo 2: Subtraction
echo 3: Multiplication, 
echo 4: Division
echo ============================
read math

case "$math" in
        Addition)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 + $num2`
            echo Answer: $result
            break
        ;;
        Subtraction)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 - $num2`
            echo Answer: $result
            break
        ;;
        Multiplication)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=$(expr "scale=2; $num1 * $num2" | bc)
            echo Answer: $result
            break
        ;;
        Division)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=$(expr "scale=2; $num1/$num2" | bc)
            echo Answer = $result
            break
        ;;
        *)
            echo Choose 1 to 4 only!!!!
            break
        ;;
    esac
done
echo "Do you want to calculate again? (y/n):"
read i

echo "Thank you for using this program"

exit 0

преди 14 минути, ARCS написа:

 

Тук не се слагат спейсове:

i="yes"

И тези редове е по-добре да са така:

result=$(echo "scale=2; $num1 * $num2" | bc)

Редактирано от capnemo (преглед на промените)

  • Автор
преди 12 минути, capnemo написа:

Тук не се слагат спейсове:

i="yes"

Махнах спейсовете. Сега проблемът го няма, но като въведа "yes", програмата излиза. Искам като дам yes да правя следващо изчисление. Къде може да е проблема?

Горе цикълът е while $i = "yes", а долу си писал echo "Do you want to calculate again? (y/n):". Да не би да пишеш само y?

преди 12 минути, ARCS написа:

Махнах спейсовете. Сега проблемът го няма, но като въведа "yes", програмата излиза. Искам като дам yes да правя следващо изчисление. Къде може да е проблема?

това:

done
echo "Do you want to calculate again? (y/n):"
read i

трябва да е така:

echo "Do you want to calculate again? (y/n):"
read i

done

  • Автор
преди 12 минути, capnemo написа:

това:

done
echo "Do you want to calculate again? (y/n):"
read i

трябва да е така:

echo "Do you want to calculate again? (y/n):"
read i

done

Направих го, но така въобще не ме питам дали искам да продължа. Вижте снимката.

https://www.dropbox.com/s/06raq41gez4ne6u/shell.PNG?dl=0

 

преди 16 минути, RJ45 написа:

Горе цикълът е while $i = "yes", а долу си писал echo "Do you want to calculate again? (y/n):". Да не би да пишеш само y?

Пиша yes. Но не става. Излиза ми от програмата. А искам да въвеждам повече от веднъж.

преди 12 минути, ARCS написа:

Направих го, но така въобще не ме питам дали искам да продължа. Вижте снимката.

https://www.dropbox.com/s/06raq41gez4ne6u/shell.PNG?dl=0

 

Пиша yes. Но не става. Излиза ми от програмата. А искам да въвеждам повече от веднъж.

Изпълнете командата така за да проверите от къде минава:

bash -x c.sh

И не ползвайте break а continue :)

Редактирано от capnemo (преглед на промените)

  • Автор
преди 14 минути, capnemo написа:

Изпълнете командата така за да проверите от къде минава:

bash -x c.sh

И не ползвайте break а continue :)

Да така мога да въвеждам колкото си искам, но искам да го направя да ме пита дали искам да продължа и ако не искам да излиза от програмата, ако искам да правя ново изчисление.

преди 11 минути, ARCS написа:

Да така мога да въвеждам колкото си искам, но искам да го направя да ме пита дали искам да продължа и ако не искам да излиза от програмата, ако искам да правя ново изчисление.

Това ще го направи while цикъла. Break просто излиза от текущия шел (от подшела в който пускате скрипта). И добавете като първи ред:

#!/bin/bash

  • Автор
преди 12 минути, capnemo написа:

Това ще го направи while цикъла. Break просто излиза от текущия шел (от подшела в който пускате скрипта). И добавете като първи ред:

#!/bin/bash

Добавих  #!/bin/bash , но проблемът е че while цикълът не работи и не мога да разбера къде е проблемът?

преди 11 минути, ARCS написа:

Добавих  #!/bin/bash , но проблемът е че while цикълът не работи и не мога да разбера къде е проблемът?

Пуснете един трейс и вижте къде не си върши работата

  • Автор
преди 13 минути, capnemo написа:

Пуснете един трейс и вижте къде не си върши работата

Направих го, но не мога да разбера къде е проблема. Вижте този скрийншот.

https://www.dropbox.com/s/nssm4928z0mnli4/shell2.PNG?dl=0

преди 9 минути, ARCS написа:

Направих го, но не мога да разбера къде е проблема. Вижте този скрийншот.

https://www.dropbox.com/s/nssm4928z0mnli4/shell2.PNG?dl=0

Вие за копи и пейст не сте ли чувал? Не е ли по-лесно след като говорим за текстова консола да работим с текстове, а не изображения?

И преместихте ли done където ви казах?

  • Автор

Просто каквото и да въведа yes/no/... не ми го възприема. Все едно го няма цикълът.

преди 10 минути, capnemo написа:

Вие за копи и пейст не сте ли чувал? Не е ли по-лесно след като говорим за текстова консола да работим с текстове, а не изображения?

И преместихте ли done където ви казах?

#!/bin/bash

i=yes
while [ $i=yes ]
do

echo What operation would you like to perform: 
echo ============================
echo 1: Addition, 
echo 2: Subtraction
echo 3: Multiplication, 
echo 4: Division
echo ============================
read math

case "$math" in
        Addition)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 + $num2`
            echo Answer: $result
            break 
        ;;
        Subtraction)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 - $num2`
            echo Answer: $result
            break 
        ;;
        Multiplication)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
           result=$(echo "scale=2; $num1 * $num2" | bc)
            echo Answer: $result
            break 
        ;;
        Division)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=$(echo "scale=2; $num1/$num2" | bc)
            echo Answer = $result
            break 
        ;;
        *)
            echo Choose 1 to 4 only!!!!
            break 
        ;;
    esac

echo "Do you want to calculate again? (yes/no):"
read i
done
echo "Thank you for using this program"

exit 0

преди 10 минути, capnemo написа:

Вие за копи и пейст не сте ли чувал? Не е ли по-лесно след като говорим за текстова консола да работим с текстове, а не изображения?

И преместихте ли done където ви казах?

#!/bin/bash

i=yes
while [ $i=yes ]
do

echo What operation would you like to perform: 
echo ============================
echo 1: Addition, 
echo 2: Subtraction
echo 3: Multiplication, 
echo 4: Division
echo ============================
read math

case "$math" in
        Addition)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 + $num2`
            echo Answer: $result
            break 
        ;;
        Subtraction)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 - $num2`
            echo Answer: $result
            break 
        ;;
        Multiplication)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
           result=$(echo "scale=2; $num1 * $num2" | bc)
            echo Answer: $result
            break 
        ;;
        Division)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=$(echo "scale=2; $num1/$num2" | bc)
            echo Answer = $result
            break 
        ;;
        *)
            echo Choose 1 to 4 only!!!!
            break 
        ;;
    esac

echo "Do you want to calculate again? (yes/no):"
read i
done
echo "Thank you for using this program"

exit 0

Знаете ли къде може да е проблема? Благодаря!

  • Автор

Махнах всички break, но просто цикълът ми става безкраен и нямам право на избор, което и важно за тази задача.

#!/bin/bash

i=yes
while [ $i == 'yes' ]
do

echo What operation would you like to perform: 
echo ============================
echo 1: Addition, 
echo 2: Subtraction
echo 3: Multiplication, 
echo 4: Division
echo ============================
read math

case "$math" in
        1)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 + $num2`
            echo Answer: $result
             
        ;;
        2)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=`expr $num1 - $num2`
            echo Answer: $result
             
        ;;
        3)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
           result=$(echo "scale=2; $num1 * $num2" | bc)
            echo Answer: $result
             
        ;;
        4)
            echo "Enter first no:"
            read num1
            echo "Enter second no:"
            read num2
            result=$(echo "scale=2; $num1/$num2" | bc)
            echo Answer = $result
            
        ;;
        *)
            echo Choose 1 to 4 only!!!!
            
        ;;
    esac

echo "Do you want to calculate again? (yes/no):"
read i
done
echo "Thank you for using this program"

exit 0

 

  • Автор
преди 22 часа, capnemo написа:

Пробвайте да махнете всички break

Задачата е почти готова, но защо при делението ми казва illegal number. Можете ли да ми помогнете?

==========================================================================================================================================================

#!/bin/sh

answer=y
while [ $answer = y ]
do

echo =========================================
echo What operation would you like to perform: 
echo If you dont want to calculate hit Ctrl+c.
echo =========================================
echo 1: Add, 
echo 2: Subtract
echo 3: Multiply, 
echo 4: Divide
echo 5: Ctrl+c
echo =========================================
read choice

case "$choice" in
        Add)
        echo "Now you are going to Sum the numbers!"
            echo "Enter first number:"
            read number1
            echo "Enter second number:"
            read number2
            result=`expr $number1 + $number2`
        echo "Your calculation is: $number1 + $number2" 
            echo And the Answer is: $result
        ;;
        Subtract)
           echo "Now you are going to Subtract the numbers!"
            echo "Enter first number:"
            read number1
            echo "Enter second number:"
            read number2
            result=`expr $number1 - $number2`
        echo "Your calculation is: $number1 - $number2" 
            echo And the Answer is: $result            
        ;;
        Multiply)
        echo "Now you are going to Multiply the numbers!"
            echo "Enter first number:"
            read number1
            echo "Enter second number:"
            read number2
           result=$(echo "scale=2; $number1 * $number2" | bc)
        echo "Your calculation is: $number1 * $number2" 
            echo And the Answer is: $result            
        ;;

//Според мен тук някъде трябва да е проблема.
        Divide)
        echo "Now you are going to Divide the numbers!"
            echo "Enter first number:"
            read number1
            echo "Enter second number:"
            read number2
            result=$(echo "scale=2; $number1/$number2" | bc)
        echo "Your calculation is: $number1 / $number2"            
        echo And the Answer is: $result
        ;;
        *)
        echo "Wrong choice!!!"
            echo "Choose from 1 to 4 to make a calculation!!!! And hit Ctrl+c to Exit." 
        ;;
    esac

        if [ "$result" -eq 100 ] ; then
            echo "You are right!"

////Според мен тук някъде трябва да е проблема.
        
echo "Do you want to calculate again? y/n"
        read answer
fi
done
echo "Thank you for using this program!"

exit 0

============================================================================================================================================

преди 24 минути, ARCS написа:

 

Проблема ви е вероятно в разделителя на цялата част. Вие какво въвеждате като тестови числа?

  • Автор
преди 56 минути, capnemo написа:

Проблема ви е вероятно в разделителя на цялата част. Вие какво въвеждате като тестови числа?

Въвеждам 200/2 и явно не може да го сравни със 100. Какъв трябва да бъде разделителя. bc или друг. 

 if [ "${result%%.*}" -eq 100 ] ; then
            echo "You are right!"

Защото -eq е за сравнение на Integer числа, а резултата от делението се получава Float.

Редактирано от g060dimitrov (преглед на промените)

  • Автор
преди 22 часа, g060dimitrov написа:

 if [ "${result%%.*}" -eq 100 ] ; then
            echo "You are right!"

Защото -eq е за сравнение на Integer числа, а резултата от делението се получава Float.

Всичко е наред. Получи се. Благодаря за отделеното време.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    26%
    Дарени 256.00 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.