linux总结02-关于ubuntu中sh执行shell脚本报错问题

第02总结——关于ubuntu中sh执行shell脚本报错问题

参照《鸟哥的linux私房菜》书中写条件判断的例子:

  1. 当执行一个程序的时候,这个程序会让用户选择 Y 或 N
  2. 如果用户输入 Y 或 y 时,就显示『 OK, continue 』
  3. 如果用户输入 n 或 N 时,就显示『 Oh, interrupt ! 』
  4. 如果不是 Y/y/N/n 之内的其他字符,就显示『 I don’t know what your choice is 』

所写脚本如下 ans_yn.sh:

#!/bin/bash
read -p "Please input (Y/N): " ynp
[ "${ynp}" == "Y" -o "${ynp}" == "y" ] && echo "OK,continue" && exit 0
[ "${ynp}" == "N" -o "${ynp}" == "n" ] && echo "Oh,interrupt!" && exit 0
echo "I don't know what your choise is" && exit 0

执行 sh ans_yn.sh

ubuntu@kvm-test:~/bin$ sh ans_yn.sh 
Please input (Y/N): y
ans_yn.sh: 8: [: y: unexpected operator
ans_yn.sh: 9: [: y: unexpected operator
I don't know what your choise is

可以看到上面显示有报错

再用bash ans_yn.sh执行

ubuntu@kvm-test:~/bin$ bash ans_yn.sh 
Please input (Y/N): y
OK,continue

正确执行。而且鸟哥的书中写道,对shell脚本可以以 bash 程序来执行:通过『 bash shell.sh 』或『 sh shell.sh 』来执行。那为何 『 sh shell.sh 』 也可以执行呢?这是因为 /bin/sh 其实就是 /bin/bash (链接), 使用 sh shell.sh亦即告诉系统,我想要直接以 bash 的功能来执行 shell.sh 这个文件内的相关指令的意思。

那就回到刚才的报错,sh执行报错,是不是因为/bin/sh的链接非/bin/bash

通过命令查看

ubuntu@kvm-test:~/bin$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 Sep 18 18:52 /bin/sh -> dash

果然,sh链接的是dash,而不是bash,所以造成执行结果不一样(一个报错,一个正常执行)
如果想把/bin/sh的链接改为bash,则可以执行下面的命令

ubuntu@kvm-test:~/bin$ sudo ln -sf /bin/bash /bin/sh
sudo: unable to resolve host kvm-test
[sudo] password for ubuntu: 
ubuntu@kvm-test:~/bin$ ls -al /bin/sh
lrwxrwxrwx 1 root root 9 Nov 29 14:58 /bin/sh -> /bin/bash

再执行 sh ans_yn.sh

ubuntu@kvm-test:~/bin$ sh ans_yn.sh 
Please input (Y/N): y
OK,continue

不再报错

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值