2015-03-23 2 views
-1

я пытаюсь сделать следующий написать скрипт, который содержит меньше или больше, чем, но он дал мне следующее сообщение об ошибке: syntax error: arithmetic expression required пожалуйста проконсультировать пример кода ниже:Баша ошибка синтаксиса сценария: арифметическое выражение требуется

x=1 
    for ($x -lt 21) -- I tried the following expressions: ($x <21), ("$x"<21), ("$x" -lt 21) 
     do 
     if ($x!=7 or $x!=15); 
     then 
     echo $x 
     fi 
x++ 
     done 

сообщение об ошибке я получаю:

./test1.sh: line 2: syntax error near unexpected token `-lt' 
./test1.sh: line 2: ` for ($x -lt 21)' 
+0

Это не синтаксис для цикла bash/sh for. См. Http://mywiki.wooledge.org/BashSheet?highlight=%28for%29%7C%28loop%29#Loops и http://www.gnu.org/software/bash/manual/bashref.html#Looping- Constructs –

+1

Является ли это 'for', который должен быть' if' или 'while'? Вы показали нам, что код явно неверен, но вы не дали нам достаточной информации, чтобы угадать, как будет выглядеть соответствующий правильный код. –

+0

Пожалуйста, посмотрите: http://www.shellcheck.net/ – Cyrus

ответ

2

В Баш:

#!/bin/bash 

declare -i x=1 

while [ $x -lt 21 ]; do 
    [ $x -ne 7 -a $x -ne 15 ] && printf "%s\n" $x 
    ((x++)) 
done 

Выход

$ bash thescript.sh 
1 
2 
3 
4 
5 
6 
8 
9 
10 
11 
12 
13 
14 
16 
17 
18 
19 
20 
+0

Вы попробовали? Я получил 'bash: синтаксическая ошибка около неожиданного токена' $ x'' –

+0

Я пробовал этот скрипт, и он дал мне ту же ошибку. –

+0

Иисус, вы, ребята, быстро прыгаете на подземелье. Извините за туман. Я обязательно вернусь ... –

1

Это не то, как вы выражаете состояние. man test для деталей.

Вы, вероятно, хотите что-то больше, как это:

#!/bin/bash 

x=1 
while [ $x -lt 21 ]; do 
    if [ $x -ne 7 ] || [ $x -ne 15 ]; then 
     echo $x 
    fi 
    # don't forget to set x to something else, or the loop will never finish. 
done 

я использовал while вместо for, потому что .. for шагов через набор значений, в то время как while проверяет результат теста.

Обратите внимание, что это STILL неверно, потому что ваше условие «или» ... неудобно. Независимо от того, что такое $x, условие будет оценивать true, потому что во ВСЕХ случаях переменная либо «не 7», либо «не 15».

Но это, скорее всего, XY Problem. Что вы действительно пытаясь сделать?

+0

Извините, забудьте добавить x ++ в код. –

+0

@AhmadAbuhasna, вопрос остается .. что вы * действительно * пытаетесь сделать? – ghoti

+0

Ваш код застрял в бесконечном цикле. –

Смежные вопросы