views:

415

answers:

6

I want to check if my string contain one or more asterisk.

I have tried this :

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

It worked when I launch directly the script, but not if this script is called during shutdown (script installed in run level 0 and 6 via update-rc.d)

Any idea, suggestion ?

Thanks

+1  A: 

Always quote strings.

To check if the string $date_alarm contains an asterisk, you can do:

if echo x"$date_alarm" | grep '*' > /dev/null; then
    ...
fi 
William Pursell
Works great thanks a lot
voidAndAny
A: 

what happens if you replace

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

with

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

you might also want to try:

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

not sure about that one...

regards

Atmocreations
if [[ "$date_alarm" =~ .*\*.* ]]Don't work, but as I said the strange thing is that it doesn't work only in init context during shutdown if [[ "$date_alarm" =~ '\*+' ]]not testedTahnks
voidAndAny
Quote the pattern: if [[ "$date_alarm" =~ ".*\*.*" ]]
bstpierre
A: 
if echo $date_alarm|perl -e '$_=<>;exit(!/\*/)'
then
    ...
fi
chaos
A: 
case "$date_alarm" in
*\**)
  ...
  break
  ;;
*)
  # else part
  ...
  ;;
esac

The syntax is, well, /bin/sh, but it works.

reinierpost
A: 

Finally

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

did the trick

Strange thing =~ .*. doesn't work only in init context during shutdown, but work perfectly if launch in bash context....

voidAndAny
no need to call external program such as grep to do what you want. In bash, the case statement should suffice.
ghostdog74
A: 
expr "$date_alarm" : ".*\*.*"
BreizhGatch