sh与bash执行语法严谨问题
在Linux中,我们知道有几种方式可以运行.sh
脚本
- 通过
sh
或者bash
命令来运行 - 通过
source
来运行 - 通过
./xxx.sh
来运行(这种方式要求对脚本文件有r
和x
权限才行)
今天在写脚本的过程中,遇到了一个问题,关于[]
判断符,脚本如下:
#!/bin/bash
# Program
# 这个程序会判断用户输入的是否为Y或者N
# History
# 2018/10/03 DingNan first release
read -p "make your choice Y(y) or N(n): " flag
[ "$flag" == "Y" -o "$flag" == "y" ] && echo "OK, continue" && exit 0
[ "$flag" == "N" -o "$flag" == "n" ] && echo "Oh, interrupt" && exit 0
echo "I don't know what you choice is\n" && exit 0
环境为Debian
。通过sh
来运行脚本会得到错误的输出结果,类似这种
sh05.sh: 8: [: Y: unexpected operator
sh05.sh: 9: [: Y: unexpected operator
但其实脚本本身是没有任何问题的。怎么说呢,如果你通过bash
来运行这个脚本,你会发现,可以得到正确的输出。
其原因如下:
bash
语法是sh
语法的超集 - 系统上的/bin/sh
可执行文件可能只提供标准的sh
功能,当然其中没有包含[]
样式的测试。
sh与bash执行语法严谨问题的更多相关文章
- ./yy.sh -d bash 执行脚本时所加的参数
-e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L fil ...
- source、sh、bash、./执行脚本的区别
1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以无"执行权限" 注:该命令通常用 ...
- (转)source、sh、bash、./执行脚本的区别
source.sh.bash../执行脚本的区别 原文:https://www.cnblogs.com/sparkbj/p/5976100.html 1.source命令用法: source Fil ...
- linux 下source、sh、bash、./执行脚本的区别
原文地址:http://blog.csdn.net/caesarzou/article/details/7310201 source命令用法: source FileName 作用:在当前bash环境 ...
- bash deploy.sh 通过bash命令 执行scp -r 命令将本地文件拷贝到服务器
deploy.sh 文件内容如下 #!/bin/bash #scp -r ./* root@XXXXX:/root/sunSH/xadserver/ function getdir(){ for el ...
- windows调起git bash执行sh脚本定时统计git仓库代码量
本来挺简单的一个东西硬是弄了两天 心力交瘁 找了网上不少资料 整理一下发给大家 首先是统计每个人的代码量的git命令 在网上找的 我这里做了以下修改 git log --format='%aN'|so ...
- source、sh、bash
source.sh.bash../ 执行脚本的区别 1.source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令.该filename文件可以 ...
- Ubuntu切换默认sh为bash或者dash
Ubuntu切换默认sh为bash或者dash 1 bash与dash 从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the G ...
- -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory
刚刚学习SHELL 写了一个简单的例子发生如下错误 -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory ...
随机推荐
- log4j没有作用,druid的日志信息还打印在控制台的解决办法
log4j没有实现类,需引入slf4j实现
- tomcat 配置图片虚拟路径不起作用解决办法
最近在做一个小项目,用到了图片上传服务器,以前尝试过实现这个功能Demo,虽然基本功能没有问题,但是很不完善,当时也有在博客记录, 地址如下: http://www.jb51.net/article/ ...
- ES6 我的总结学习
1 let 和 const let 的作用域与 const 命令相同:只在声明所在的块级作用域内有效.且不存在变量提升 . 1.1 let let 所声明的变量,可以改变. let a = 123 a ...
- ppt自动制作器
讲一篇论文导入进入,自动生成该论文的展示ppt,啧啧啧,想想岂不是很美妙
- oracle数据库当前用户下所有表名和表名的注释
select a.TABLE_NAME,b.COMMENTSfrom user_tables a,user_tab_comments bWHERE a.TABLE_NAME=b.TABLE_NAMEo ...
- JavaScript--DOM创建元素节点createElement
创建元素节点createElement createElement()方法可创建元素节点.此方法可返回一个 Element 对象. 语法: document.createElement(tagName ...
- Qt对象模型之二:对象树与元对象系统
一.对象树的概念 Qt中使用对象树(object tree)来组织和管理所有的QObject类及其子类的对象.当创建一个QObject时,如果使用了其他的对象作为其父对象(parent),那么这个 Q ...
- [CF1076F] Summer Practice Report
Description Transmission Gate Solution 这一题可以考虑Dp,设\(Dp[i][j]\) 为在第i段中,以j颜色为结尾的最后一小段长度的最小值. 那么可以先考虑以表 ...
- 51nod 1119 机器人走方格 V2
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少 ...
- java实现九九乘法表
public class Demo { public static void main(String[] args) { for (int i = 1; i < 10; i++) { ...