2016-09-08 150 views
0

我正在编写一段shell脚本代码,努力在我的Mac上自动执行一组终端任务。该程序在Mac终端中执行,但if语句中的任何if语句为真时,if语句中的嵌套命令不会执行。有什么建议么?如何从shell脚本执行终端命令? (MacOS 10.12)

#!/bin/bash 

FINDER="1" 
DOCK="2" 
CAFF="3" 

echo Select an option: 
echo 1. killall Finder 
echo 2. killall Dock 
echo 3. caffeinate 

echo Enter you choice: 
read CHOICE 

if [ "$CHOICE"="$FINDER" ]; then 
    killall Finder 
elif [ "$CHOICE"="$DOCK" ]; then 
    killall Dock 
elif [ "$CHOICE"="$CAFF" ]; then 
    caffeinate 
fi 

exit 

回答

2

条件中的等号周围缺少空格。

#!/bin/bash 

FINDER="1" 
DOCK="2" 
CAFF="3" 

echo Select an option: 
echo 1. killall Finder 
echo 2. killall Dock 
echo 3. caffeinate 

echo Enter you choice: 
read CHOICE 

if [ "$CHOICE" = "$FINDER" ]; then 
    killall Finder 
elif [ "$CHOICE" = "$DOCK" ]; then 
    killall Dock 
elif [ "$CHOICE" = "$CAFF" ]; then 
    caffeinate 
fi 
+0

好吧,我隔开了等号,但现在程序只执行if语句的第一个参数,不管我输入到控制台的数字是多少。 –

+0

尝试在shebang下添加'set -x',执行时会写入执行的命令并帮助您调试脚本。使用终端运行它。祝你好运! – GabLeRoux

0

感谢这个论坛的帮助,我解决了这个问题。下面是现在可以工作的代码块:

#!/bin/bash 

CHOICE=0 
FINDER=1 
DOCK=2 
CAFF=3 

echo Select an option: 
echo 1. killall Finder 
echo 2. killall Dock 
echo 3. caffeinate 

echo -n Enter your choice: 
read CHOICE 

echo You chose: $CHOICE 

if [ $CHOICE = $FINDER ]; then 
    echo Executing killall Finder… 
    killall Finder 
elif [ $CHOICE = $DOCK ]; then 
    echo Executing killall Dock…  
    killall Dock 
elif [ $CHOICE = $CAFF ]; then 
    echo Executing caffeinate… 
    caffeinate 
fi 

exit