Если файл сценария оболочки - PullRequest
0 голосов
/ 20 апреля 2011

Я пытаюсь написать сценарий оболочки, но у меня возникают трудности с выполнением специального оператора if.Я хотел бы, чтобы, если он нашел значение в файле, он что-то сделал.

Мой файл выглядит так:

1, 2, 2, 80, 0, 3, 35, 0, 4, 51, 4, 5, 31, 0, 8, 7

Я делаю это, чтобы извлечь некоторую информацию

sed -i '/^[0-9][0-9]*, [0-9][0-9]*, 3,/d' file.txt

Но я бы хотел поставить это в условие if, например, если третье число - 3, 4 или 5, я делаю sed, иначе я делаю что-то еще, я пытаюсь это сделать:

if [ '/*, *, [3,5],/d' ]; then
    echo 'ok'
else
    echo'fail'
fi

Но это не работает, оно всегда печатается нормально.

Ты знаешь, как я могу это сделать?

Ответы [ 4 ]

3 голосов
/ 20 апреля 2011

приведите более четкие примеры в следующий раз

#!/bin/bash
# tested with bash 4
while read -r x x Y x
do
  case "$Y" in
   "3," ) echo "ok";;
   *) echo "Not ok";;
  esac
done < file
1 голос
/ 20 апреля 2011

' *' будет соответствовать неопределенному количеству пробелов. Вы должны поставить [0-9]* вместо.

0 голосов
/ 20 апреля 2011

Если вы не обязаны использовать решение только для оболочки, вы можете получить третье поле с помощью awk:

#!/bin/sh
THIRD=$(awk -F', ' '{print $3}' < /tmp/myfile)
0 голосов
/ 20 апреля 2011

Вы можете использовать Internal-Field-Separator и позволить оболочке позаботиться о разборе:

#!/bin/sh
# let's create the input file
echo '5, 2, 3, 5' > /tmp/myfile

# function will output third argument
third() { IFS=', '; echo $3; }

# now let's print the third value from the input file
third $(cat /tmp/myfile)

См. Man sh и ищите IFS, чтобы узнать больше об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...