您好我在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
答案 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