[: Drink: 预期的一元运算符

fix*_*it7 0 bash scripts

当我使用 alarm.sh 运行它时 5 “喝茶”。我得到

/home/andy/bin/alarm.sh: line 27: [: Drink: unary operator expected
Run Code Online (Sandbox Code Playgroud)

报警文件

  soundfile="/usr/share/sounds/My_Sounds/Alarm-sound-buzzer.mp3"
    #amixer -D pulse sset Master 50% > /dev/null 2>&1
    originalVolume=$(amixer -D pulse get Master | grep -m 1 -o -E [[:digit:]]+%)
    clear
    amixer -D pulse sset Master 50% > /dev/null 2>&1
    if [ -f "$soundfile" ];
    then
         echo "Soundfile is present."
    else

      echo "File $soundfile does NOT exist."
      echo
      echo "Program will now exit."
      exit
    fi

    [ ! $2 ] && {
    echo 
    echo -e "   Error!! No time value given for sleep and/or message !!"
    echo
    echo -e "   Alarm Program 2018"
    echo
    echo -e "   alarm.sh [time value in seconds] Message in double Quotes"; 
    echo -e "   alarm 5m   = 5 minute alarm"
    echo -e "   alarm 5h   = 5 hour alarm"
    echo -e "   alarm 5d   = 5 day alarm"
    echo -e "   alarm 1.5m = 1 minute 30 seconds alarm"
    echo 
    echo -e "   alarm.sh 1m "\"Take bread out of oven."\""  

    echo 
    exit 1; }
    echo  -e "\033[32;5mTIMER COUNTING DOWN to $1 \033[0m"
    sleep $1
    {
        for ((volume = 35; volume <= 50; volume += 2)); do
            amixer -D pulse sset Master ${volume}% > /dev/null
            sleep .5
        done
    } &

    cvlc --play-and-exit "$soundfile" > /dev/null 2>&1
    echo $2
    #set back to original volume
    amixer -D pulse sset Master %40

    gxmessage -fg blue -font  'sans 20' -timeout 2 ' TIME IS UP !!'
Run Code Online (Sandbox Code Playgroud)

ste*_*ver 5

要检查位置参数是否$2为空,请使用-z测试运算符并不要忘记引用变量:

[ -z "$2" ]
Run Code Online (Sandbox Code Playgroud)

help test

String operators:

  -z STRING      True if string is empty.

  -n STRING
     STRING      True if string is not empty.
Run Code Online (Sandbox Code Playgroud)

另外不要忘记#!/bin/bash在文件顶部添加适当的shebang (特别是如果您使用的是echo -e)。