linux - vCard=$(echo $REPLY | cut -d'i' -f 1) 有什么问题

标签 linux bash shell

当我测试下面的代码时,我得到一个错误:

syntax error near unexpected token `)'

代码如下:

oVideos=$Videos
Videos="Please select a video card: "
select myvideo in "Intel" \
        "Intel i915" \
        "Intel i965" \
        "NVIDIA" \
        "AMD" \
        "ATI" \
        "Radeon"
do
    if [ "$REPLY" == "quit" ]; then
        echo "OK, see you! Have a great one!"
        exit
    fi

    if [ ! -z "$myvideo" ]; then
        case $REPLY in 
            1) if [ checkVideoCard $REPLY == 0 ]; then
                echo "VIDEO_CARDS=\"intel\"" >> $MAKECONF
               fi

            2) vCard=$(echo $REPLY | cut -d'i' -f 1)
               if [ checkVideoCard $REPLY  == 0 ]; then
                echo "VIDEO_CARDS=\"intel i915\"" >> $MAKECONF
               fi
        esac
     fi
done

...

checkVideoCard 是一个函数,旨在匹配用户的选择和 lspci 结果。别担心。

非常感谢!

最佳答案

您必须使用 ;; 终止与特定 case 值关联的命令:

case $REPLY in 
    1) if [ "$(checkVideoCard "$REPLY")" = 0 ]; then
           echo "VIDEO_CARDS=\"intel\"" >> $MAKECONF
       fi
       ;;
    # Because there's no difference among intel video cards, so please make sure what exact video card type you have.
    2) vCard=$(echo $REPLY | cut -d'i' -f 1)
       if [ "$(checkVideoCard "$REPLY")"  = 0 ]; then
           echo "VIDEO_CARDS=\"intel i915\"" >> $MAKECONF
       fi
       ;;
esac

问题不在于赋值,而是在前一个未终止的情况下尝试使用 2) 开始一个新案例。

关于linux - vCard=$(echo $REPLY | cut -d'i' -f 1) 有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33618208/

相关文章:

c - 基本单元测试和 C,我如何开始?

linux - 如何在 Linux 上传递带感叹号的参数?

json - jq 在空格后截断 ENV 变量

shell - svn diff -x (v1.6) 不接受我的 diff 选项 --unified=40

linux - 映射到给定键盘快捷键的 linux shell 命令的名称?

linux - 如何使用正则表达式替换 bash 中的某些字符?

python - 哪个是运行文件系统监控服务的更好方法?

linux - 如何处理 perl 中的挂起情况?访问文件后

linux - Echo 像书的索引一样排序

bash - 使用 inotifywait 和 avconv 解释 bash 脚本中的字符串