2015-10-18 6 views
0

Напишите сценарий оболочки «order.sh» Bash, который принимает два целых аргумента «a» и «b» и выводит соответствующее соотношение «a < b», «a == b», или «a> b» (с заменой «a» и «b» на их значения).сравнить 2 числа в сценарии оболочки

код:

#!/bin/bash 
echo -n "enter the first number:"; read x 
echo -n " enter the second number:"; read y 

if ["$x " -lt "$y"] 
then 
echo "$x < $y" 
else 
echo"$y < $x" 

if [ "$x" -eq "$y"] 
then 
echo " $x == $y " 

fi 

я не в состоянии составить свой код, как это удается, и говорит «/ бен/ш: сделать команда не найдена» кто-то может сказать мне, что это значит? Я новичок в shell-скриптах, и я понятия не имею, в чем проблема ...

+0

Try 'WhereIs bash' команда –

+0

' www.shellcheck.net/'является вашим другом. Среди других проблем вы обнаружите, что вам нужно пространство после '[' и before'] ' – pcantalupo

+0

MO, когда что-то не работает в bash, вы можете включить вывод отладки, вызвав ваш скрипт с помощью' bash -x scriptname'. Это, помимо обычных ошибок, которые вы должны увидеть, покажет вам по очереди операцию вашего скрипта, напечатанную на 'stdout' (экран). Если по какой-то причине bash не находится в вашем 'PATH', то он обычно находится в'/usr/bin/bash' (в большинстве систем типа unix/linux). Если вы используете 'mingw/msys' в окнах, прочитайте инструкции по установке' mingw' для установки пути и среды. В какой ОС вы работаете? –

ответ

0

Возможно, вы должны использовать /usr/bin/env, чтобы найти bash. Я думаю, вы также хотели elifelse - ваш текущий отсутствует fi и не будет проверять больше), и вы должны использовать [[ и ]] (также вы пропустили пробел с echo"$y < $x"). Что-то вроде,

#!/usr/bin/env bash 

echo -n "enter the first number:"; read x 
echo -n "enter the second number:"; read y 
if [[ "$x" -lt "$y" ]]; then 
     echo "$x < $y" 
elif [[ "$x" -gt "$y" ]]; then 
     echo "$y < $x" 
else 
     echo "$x == $y" 
fi 

То, что я тестировал, и делает, как и следовало ожидать. Я предлагаю вам посмотреть 7.02. More advanced if usage - Bash Beginner's Guide

+0

Почему бы не 'read -p' вместо' echo; read'? –

+0

@BenjaminW. какая разница между чтением -p и чтением x? –

+0

'read -p" Введите что-то: строка «строка» содержит строку приглашения; это почти то же самое, что и 'echo -n" Введите что-то: "; read line', но только в одном из операторов, и приглашение отображается только в том случае, если вход поступает с терминала (см. [руководство] (https://www.gnu.org/software/bash/manual/html_node/Bash-Builtins .html # Bash-встроенные команды)). –

2

я не в состоянии составить свой код, как это удается, и говорит «/ бен/ш: сделать команда не найдена» кто-то может сказать мне, что это значит? Я новичок в языке сценариев командной оболочки, и я понятия не имею, что это проблема ...

Несколько проблем в этом заявлении:

  • «компилировать этот код» ... Баш скрипт не необходимо скомпилировать. Bash - интерпретируемый язык
  • «/ bin/sh: make command not found» означает, что он выглядит так: команда make не найдена. У вас нет команды make на вашем PATH.Но это не имеет значения, потому что вам не нужно make здесь

Ваш сценарий имеет синтаксические ошибки, например:

if ["$x " -lt "$y"] 

Вам нужно поставить пробел после [ и до ], например:

if [ "$x " -lt "$y" ] 

Другие проблемы:

  • Не используя if-elif-else для 3 случаев
  • сломанные условия: есть 2 if, но только 1 закрывающие fi

Несколько советов:

  • Для выполнения арифметики в Bash, us e ((...)) вместо [...].
  • Вместо echo -n; read, используйте read -p: это одна команда вместо двух, и флаги echo не являются переносимыми, поэтому лучше избегать их использования
  • Отступ содержание if-elif-else, чтобы сделать сценарий легче читать

С исправлениями и улучшениями применяются:

#!/usr/bin/env bash 

read -p "enter the first number: " 
read -p "enter the second number: " 

if ((x < y)); then 
    echo "$x < $y" 
elif ((x > y)); then 
    echo "$y < $x" 
else 
    echo "$x == $y" 
fi 
Смежные вопросы