2009-07-28 3 views
5

Я хочу проверить, содержит ли моя строка одну или несколько звездочек.Проверьте, содержит ли строка Asterisk (*)

Я попытался это:

if [[ $date_alarm =~ .*\*.* ]] 
then 
    ... 
fi 

Он работал, когда я запускаю непосредственно сценарий, но если этот скрипт вызывается при завершении работы (скрипт установлен на уровне выполнения 0 и 6 с помощью обновления-rc.d)

Любая идея, предложение?

Thanks

+1

Мое предположение, что ваша система инициализации не использует '/ bin/bash' в качестве интерпретатора, вместо этого она будет использовать'/bin/sh'. –

+0

Если ответ Уильяма работал, не забудьте нажать кнопку «Принять ответ»! – dbr

ответ

2

Всегда указывайте строки.

Чтобы проверить, если строка $ date_alarm содержит звездочку, вы можете сделать:

 
if echo x"$date_alarm" | grep '*' > /dev/null; then 
    ... 
fi 
+0

Огромное спасибо – voidAndAny

0

что произойдет, если вы замените

if [[ $date_alarm =~ .*\*.* ]] 

с

if [[ "$date_alarm" =~ .*\*.* ]] 

вы также можете :

if [[ "$date_alarm" =~ '\*+' ]] 

не уверен, что один ...

С уважением

+0

, если [["$ date_alarm" = ~. * \ *. *]] Не работает, но, как я уже сказал, странно, что он не работает только в контексте init во время выключение если [[ "$ date_alarm" = ~ '\ * +']] не тестировалось Tahnks – voidAndAny

+0

Quote картина: если [[ "$ date_alarm" = ~] "* \ *. *".] – bstpierre

0
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)' 
then 
    ... 
fi 
1
case "$date_alarm" in 
*\**) 
    ... 
    break 
    ;; 
*) 
    # else part 
    ... 
    ;; 
esac 

Синтаксис, ну,/бен/ш, но она работает.

0

Наконец

if echo x"$date_alarm" | grep '*' > /dev/null; then 

сделал трюк

Странная вещь = ~. *. не работает только в контексте инициализации во время завершения работы, но работать идеально, если запуск в контексте Баш ....

+0

нет необходимости вызывать внешнюю программу, такую ​​как grep, чтобы делать то, что вы хотите. В bash аргумент case должен быть достаточным. – ghostdog74

2
expr "$date_alarm" : ".*\*.*" 
+1

немного объяснений было бы хорошо;) – MUG4N

0

Нет необходимости перенаправить стандартный вывод, как это делают другие. Вместо этого используйте опцию -q grep:

if echo x "$ date_alarm" | grep -q '*'; то

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