为什么我的Bash中的If语句不起作用?

时间:2016-03-18 16:29:22

标签: bash shell unix ubuntu if-statement

您好我在bash中创建一个归档系统,其中包含一个冗长而混乱的if语句,该语句当前不能使用else if语句在最后几行中使用当前错误。虽然我希望这句话还有其他错误。变量选择来自显示在终端中的菜单。因此,如果他们选择选项1,则用户必须输入要写入crontab文件的数据。

if [ $choice -eq "1" ] then
echo "Enter the MINUTE"
read  minute

    if [ $minute -eq 0 ] then
        GLOBIGNORE=*
        minute="*"
        echo minute
    fi

echo "Enter the Hour"
read hour

    if [ $hour -eq 0 ] then
        GLOBIGNORE=*
        hour="*"
        echo hour
    fi

echo "Enter the Day"
read day

    if [ $day -eq 0 ] then
        GLOBIGNORE=*
        day="*"
        echo day
    fi

echo "Enter the Month"
read month

    if [ $month -eq 0 ] then
        GLOBIGNORE=*
        month="*"
        echo month
    fi

echo "Enter the weekday"
read weekday

    if [ $weekday -eq 0 ] then
        GLOBIGNORE=*
        weekday="*"
        echo weekday
    fi


echo $minute $hour $day $month $weekday " date > ~/testcron.log" > testcron.txt fi
elif [ $choice -eq "2" ]
then
    echo "Enter the Source and Destination Locations"
fi

2 个答案:

答案 0 :(得分:0)

你错过了一个分号:

if [ $choice -eq "1" ]; then

if [ $choice -eq "1" ] 
then

需要使用分号或换行符,因为命令实际上是[并且必须在]之后终止,这只是给出的最后一个参数[

这是旧的test(或[)语法,您也可以使用:

if (( choice == 1 ))
then

答案 1 :(得分:0)

您的代码存在以下问题:

if [ $hour -eq 0 ] then
    GLOBIGNORE=*
    hour="*"
    echo hour
fi

一般情况下(所有测试[])之后都缺少;

if [ $hour -eq 0 ]; then

echo小时不会打印var hour的值,而是单词hour。更改为echo "$hour"(是,引用)。此外,如果正确引用了变量,则无需将变量GLOBIGNORE设置为*

这里的vars没有被引用,这是它失败的原因(或需要GLOBIGNORE):

echo $minute $hour $day $month $weekday

更改为:

echo "$minute $hour $day $month $weekday"

同一行的重定向是普通的>,它将清空文件 如果要附加到文件,请执行以下操作:

echo "$minute $hour $day $month $weekday" "$(date >> ~/testcron.log)" >>testcron.txt

在该行中有一个不需要的额外费用

此脚本可能有所帮助:

get(){
    read -p "$1" "$2"
    if [ "$((${!2}))" -eq 0 ]; then
        eval "$2"="*"
        echo "${!2}"
    fi
}

read -p "Choice?:" choice

if [ "$choice" -eq "1" ]; then
    get "Enter the MINUTE"  minute
    get "Enter the Hour"    hour
    get "Enter the Day"     day
    get "Enter the Month"   month
    get "Enter the weekday" weekday
    date >> ~/testcron.log
    echo "$minute $hour $day $month $weekday" >> testcron.txt
elif [ "$choice" -eq "2" ]; then
    echo "Enter the Source and Destination Locations"
fi