V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
commoccoom
V2EX  ›  问与答

鸟哥 Linux 私房菜里的一个 shellscript 例题。但是执行的时候发生错误,求指导。

  •  
  •   commoccoom · 2014-12-08 20:52:15 +08:00 · 2849 次点击
    这是一个创建于 3670 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1 #!/bin/bash
    2 #Porgram
    3 # This program shows the user's choice.
    4 #History
    5 #2014/12/08
    6 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
    7 export PATH
    8
    9 read -p "Please input (Y/n):" yn
    10 [ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK.continue" && exit 0
    11 [ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh,interrupt!" && exit 0
    12 echo "I don't know what your choice is" && exit 0
    13


    完全按照书上写的,但是运行错误。

    root@default:~/shell# sh sh06.sh
    Please input (Y/n):y
    sh06.sh: 10: [: y: unexpected operator
    sh06.sh: 11: [: y: unexpected operator
    I don't know what your choice is
    root@default:~/shell#
    第 1 条附言  ·  2014-12-08 21:58:44 +08:00
    已经解决!感谢所有人员!
    12 条回复    2014-12-08 22:52:44 +08:00
    adjusted
        1
    adjusted  
       2014-12-08 21:27:09 +08:00   ❤️ 1
    你确定你都输入对了?看不出什么问题啊。。。
    kidlj
        2
    kidlj  
       2014-12-08 21:27:44 +08:00   ❤️ 2
    是这样的,因为你执行这个脚本用的 `/bin/sh`,而不是 `/bin/bash`,sh 是不支持 `==` 这个比较操作符的,它用 `=` 代表等于。你没看错,这就是POSIX标准。

    而bash是支持`==`操作的。所以你可以:

    - 用 bash 来执行这个脚本

    - 如果非要用 sh 来执行,那么就把`==` 改成 `=`


    另外不要用`root`来实验和执行脚本呢?这样是很危险的。
    ZircoN
        3
    ZircoN  
       2014-12-08 21:33:48 +08:00   ❤️ 1
    直接 ./sh06.sh 试试 楼上貌似正解。
    adjusted
        4
    adjusted  
       2014-12-08 21:36:27 +08:00   ❤️ 1
    怎么记得sh是link到bash的...
    caixiexin
        5
    caixiexin  
       2014-12-08 21:39:47 +08:00   ❤️ 1
    我发现好像是空格问题你的脚本==左右两边是不是有空格?我把你的拷贝下来,去掉==两边的空格是能运行的
    commoccoom
        6
    commoccoom  
    OP
       2014-12-08 21:40:16 +08:00
    @kidlj
    感谢!

    因为是个用来扶墙的微型VPS,只装了SS,所以就用root了 ,挂了就重装~。~
    bitwing
        7
    bitwing  
       2014-12-08 21:46:19 +08:00   ❤️ 1
    @adjusted Debian 系的某些是链接到 dash 的......
    nealfeng
        8
    nealfeng  
       2014-12-08 21:48:38 +08:00   ❤️ 1
    @commoccoom 本地虚拟机就好了,何必上vps折腾学linux
    commoccoom
        9
    commoccoom  
    OP
       2014-12-08 21:54:31 +08:00
    @caixiexin
    去掉空格后确实行了。另外2楼的方法也是行的。

    但是鸟哥在书上还强调要加空格~。~
    commoccoom
        10
    commoccoom  
    OP
       2014-12-08 21:57:20 +08:00
    @nealfeng
    手机端装个SSH客户端能登录VPS,利用点碎时间看看脚本什么的~。~
    caixiexin
        11
    caixiexin  
       2014-12-08 22:08:38 +08:00
    @commoccoom 要看你看的书是第几版了,之前买的时候就看书评有人说新版排版有问题,有几个示例脚本会多空格导致脚本执行错误,所以就拿你发的试了一下,没想到你果然被书坑了2333
    Muninn
        12
    Muninn  
       2014-12-08 22:52:44 +08:00
    主要要看sh被链接到啥了...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5291 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 09:14 · PVG 17:14 · LAX 01:14 · JFK 04:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.