& ldquo; ошибка синтаксиса: неожиданный конец файла & rdquo; простой скрипт

У меня уже были установлены «Samsung Unified Linux Driver» и «Xsane», и принтер работал хорошо. Только сканер не найден. После добавления следующей записи в /etc/sane.d/xerox_mfp.conf был найден сканер:

#Samsung CLX-3180 tcp 10.0.0.11 # <- insert your printer's actual IP here

PS: Я получил этот намек по этой ссылке.

2
задан 3 June 2012 в 17:54

16 ответов

Есть три очевидные ошибки:

В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поставьте перед ней ;). [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть записана test) с единственным аргументом "$3" и с перенаправлением ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойной скобкой является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри. ["$2" < 50 ] не хватает места после открытия скобки.

Также обычным соглашением в сценариях оболочки является посылка символа новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

2
ответ дан 25 May 2018 в 10:39
  • 1
    [[ $3 < 50 ]] сравнивает $ 3 с 50 лексикографически , поэтому, если $ 3 - 6, например, команда возвращает false, так как 6 появляется после 5. используйте (( )) для арифметического сравнения. – geirha 3 June 2012 в 19:47
  • 2
    @geirha О, да, конечно. Исправлена. Благодарю. – Gilles 3 June 2012 в 19:52
  • 3
    Хорошо, спасибо вам большое, извините за эти немые ошибки, это один из моих первых скриптов. Очевидно, это больше похоже на кодирование, чем я думал. Итак, fi - это команда, пробелы важны, а [] используется для символов / строк. И да, это то, что я хочу, чтобы сценарий делал, а не получать настоящее время + 10sc. Еще раз спасибо. – Sam 3 June 2012 в 23:28
  • 4
    О, я только что заметил ошибку. Я имел в виду: elif (($ 2 и 59)); то s = $ 3-50 m = $ 2 + 1 h = $ 1 else s = $ 3-50 m = 0 h = $ 1 + 1 fi – Sam 3 June 2012 в 23:40

Существуют три очевидные ошибки:

  • В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поместите перед ней ;).
  • [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть test) с единственным аргументом "$3" и с перенастройкой ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойными скобками является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри.
  • ["$2" < 50 ] не хватает пробела после открытия скобки.

Также обычное соглашение в сценариях оболочки заключается в том, чтобы поместить символ новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

3
ответ дан 25 July 2018 в 18:40

Существуют три очевидные ошибки:

  • В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поместите перед ней ;).
  • [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть test) с единственным аргументом "$3" и с перенастройкой ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойными скобками является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри.
  • ["$2" < 50 ] не хватает пробела после открытия скобки.

Также обычное соглашение в сценариях оболочки заключается в том, чтобы поместить символ новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

3
ответ дан 2 August 2018 в 00:49

Существуют три очевидные ошибки:

  • В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поместите перед ней ;).
  • [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть test) с единственным аргументом "$3" и с перенастройкой ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойными скобками является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри.
  • ["$2" < 50 ] не хватает пробела после открытия скобки.

Также обычное соглашение в сценариях оболочки заключается в том, чтобы поместить символ новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

3
ответ дан 4 August 2018 в 16:19

Существуют три очевидные ошибки:

  • В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поместите перед ней ;).
  • [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть test) с единственным аргументом "$3" и с перенастройкой ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойными скобками является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри.
  • ["$2" < 50 ] не хватает пробела после открытия скобки.

Также обычное соглашение в сценариях оболочки заключается в том, чтобы поместить символ новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

3
ответ дан 6 August 2018 в 00:58

Существуют три очевидные ошибки:

  • В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поместите перед ней ;).
  • [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть test) с единственным аргументом "$3" и с перенастройкой ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойными скобками является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри.
  • ["$2" < 50 ] не хватает пробела после открытия скобки.

Также обычное соглашение в сценариях оболочки заключается в том, чтобы поместить символ новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

3
ответ дан 7 August 2018 в 18:24

Существуют три очевидные ошибки:

  • В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поместите перед ней ;).
  • [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть test) с единственным аргументом "$3" и с перенастройкой ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойными скобками является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри.
  • ["$2" < 50 ] не хватает пробела после открытия скобки.

Также обычное соглашение в сценариях оболочки заключается в том, чтобы поместить символ новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

3
ответ дан 10 August 2018 в 07:07

Существуют три очевидные ошибки:

  • В строке else s=$1-50 m=$2-50 h=$1+1 fi слово fi не рассматривается как ключевое слово, потому что это не первое слово в команде. Для оболочки это выглядит как три назначения, которые применяются к команде fi. Если вам когда-нибудь понадобится выполнить эту строку, вы увидите ошибку bash: fi: command not found. Положите fi на собственную строку (или поместите перед ней ;).
  • [ "$3" < 50 ] совпадает с [ "$3" ] < 50 - это команда [ … ] (которая также может быть test) с единственным аргументом "$3" и с перенастройкой ввода из файла 50. Либо используйте оператор числового сравнения -lt, либо используйте арифметическую команду (( … )). Конструкция с одним скобком является обычной встроенной командой, поэтому специальные символы, такие как <, сохраняют свое нормальное значение. Конструкция с двойными скобками является специальным синтаксисом, и вы можете использовать < в качестве оператора цифрового сравнения внутри.
  • ["$2" < 50 ] не хватает пробела после открытия скобки.

Также обычное соглашение в сценариях оболочки заключается в том, чтобы поместить символ новой строки после then и else. Кроме того, вместо блока else, который полностью состоит из оператора if, вы должны использовать elif. И, пожалуйста, последовательно отступайте.

#!/bin/bash
declare -i s
declare -i m
declare -i h

if (( $3 < 50 )); then
  s=$3+10  m=$2  h=$1
elif (( $2 < 50 )); then
  s=$3-50  m=$2+1  h=$1
else
  s=$1-50  m=$2-50  h=$1+1
fi 

echo "$h:$m:$s"

P.S. Я не рассмотрел вашу логику. Кажется, вы ищете date +%T -d 'now + 10 seconds'.

3
ответ дан 15 August 2018 в 19:05
  • 1
    [[ $3 < 50 ]] сравнивает $ 3 с 50 лексикографически , поэтому, если $ 3 равно 6, команда возвращает false, так как 6 появляется после 5. используйте (( )) для арифметического сравнения. – geirha 3 June 2012 в 19:47
  • 2
    @geirha О, да, конечно. Исправлена. Благодарю. – Gilles 3 June 2012 в 19:52
  • 3
    Хорошо, спасибо вам большое, извините за эти немые ошибки, это один из моих первых скриптов. Очевидно, это больше похоже на кодирование, чем я думал. Итак, fi - это команда, пробелы важны, а [] используется для символов / строк. И да, это то, что я хочу, чтобы сценарий делал, а не получать настоящее время + 10sc. Еще раз спасибо. – Sam 3 June 2012 в 23:28
  • 4
    О, я только что заметил ошибку. Я имел в виду: elif (($ 2 и 59)); то s = $ 3-50 m = $ 2 + 1 h = $ 1 else s = $ 3-50 m = 0 h = $ 1 + 1 fi – Sam 3 June 2012 в 23:40

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 25 May 2018 в 10:39

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 25 July 2018 в 18:40

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 2 August 2018 в 00:49

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 4 August 2018 в 16:19

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 6 August 2018 в 00:58

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 7 August 2018 в 18:24

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 10 August 2018 в 07:07

Вы забыли ; после вложенного оператора fi

#!/bin/bash

declare -i s
declare -i m
declare -i h

if [ "$3" < 50 ]; then s=$3+10  m=$2  h=$1
        else if ["$2" < 50 ];
                then s=$3-50  m=$2+1  h=$1
                    else s=$1-50  m=$2-50  h=$1+1 ;fi 
fi 

echo "$h:$m:$s"
0
ответ дан 15 August 2018 в 19:05

Другие вопросы по тегам:

Похожие вопросы: