Не равный оператор для Bash не работает правильно - PullRequest
0 голосов
/ 27 марта 2019

Я писал сценарий bash, чтобы проверить, есть ли первое слово в каждой строке равно определенному значению, но не возвращает ожидаемые значения.

скрипт bash

#!/bin/bash

if [ $# != 3 ]; then
echo "Error no file specified, default files will be considered"
a="input.txt"
b="correct.txt"
c="incorrect.txt"
while read -r line; do
d=( $line )
e=${d[0]}
if [ $e != "add" ] || [ $e != "sub" ] || [ $e != "addi" ] || [ $e != "lw" ] || [ $e != "sw" ]
then
echo "error"
else
echo "correct"
fi
done < "$a"
fi

файл input.txt:

ok lol no
right back go
why no right
sub send bye

Фактический результат: ошибка ошибка ошибка ошибка

ожидаемый результат: ошибка ошибка ошибка правильный

Ответы [ 2 ]

1 голос
/ 27 марта 2019

A case утверждение будет более понятным.

case $e in
  add|sub|addi|lw|sw) echo "correct" ;;
  *) echo "error"
esac
1 голос
/ 27 марта 2019

попробуйте это:

if ! [[ "$e" =~ (add|sub|addi|lw|sw)$ ]];then

полный код:

#!/bin/bash

if [ $# != 3 ]; then
echo "Error no file specified, default files will be considered"
a="input.txt"
b="correct.txt"
c="incorrect.txt"
while read -r line; do
    d=( $line )
    e=${d[0]}
    if ! [[ "$e" =~ (add|sub|addi|lw|sw)$ ]];then
        echo "e[$e] - error"
    else
        echo "e[$e] - correct"
    fi
done < "$a"
fi

выход:

> ./testInput.bash 
Error no file specified, default files will be considered
e[ok] - error
e[right] - error
e[why] - error
e[sub] - correct
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...