Linux Mint中写了一个简单的shell脚本,利用for..do..done结构计算1+2+3......+100的值,结果执行"sh -n xxx.sh"检测语法时总是报错,但在PC机上可正常运行;
脚本:
#!/bin/bash
#information PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH read -p "Please input a num " num
sum=0
for ((a=0; a<=$num; a++))
do
sum=$(($sum + $a))
done
echo "the sum is ==> $sum"
exit 0
错误如下:

Syntax error: Bad for loop variable
 分析: 从 ubuntu 6.10 开始,ubuntu 就将先前默认的bash shell 更换成了dash shell;其表现为 /bin/sh 链接倒了/bin/dash而不是传统的/bin/bash。

allen@allen-lql ~/workspace/script $ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Aug 12 14:29 /bin/sh -> dash

所以在使用sh执行检测的时候实际使用的是dash,而dash不支持这种C语言格式的for循环写法。

解决办法: 1、将默认shell更改为bash。(bash支持C语言格式的for循环)

sudo dpkg-reconfigure dash

在选择项中选No

2.这样执行就没问题

bash test.sh

3.那如果我们只想用sh test.sh 这样的方式执行,怎么办呢?

修改一下代码.

for i in `seq 10`
do echo Good Morning ,this is $i shell program. done

这个时候,你再执行 sh test.sh,就不会报错误啦.

 
 

最新文章

  1. java中IO流小解
  2. activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含义
  3. Struts2基础数据校验和框架校验
  4. ASP.NET技巧:教你制做Web实时进度条
  5. UML从需求到实现---类图(2)
  6. C# 使用 GetOleDbSchemaTable 检索架构信息(表、列、主键等)
  7. 关于Windows Azure 地缘组(Affinity Groups)
  8. Uncaught TypeError: Object #&lt;Object&gt; has no method &#39;fancybox&#39;
  9. MFC版美女找茬
  10. bzoj2286
  11. c#接口深入一步探究其作用,适合新人了解
  12. PHP~foreach遍历名单数组~有必要多次观看练习
  13. 无 new 构造与链式调用
  14. Java 使用PDFBox提取PDF文件中的图片
  15. java基础----&gt;String中的split方法的原理
  16. C#调试心经
  17. AngularJS 常用的功能
  18. js 正则判断字符串下划线的长度
  19. 小内存VPS apache并发控制参数prefork调优
  20. HOJ 2133&POJ 2964 Tourist(动态规划)

热门文章

  1. SQL多个逗号分开的字段值 取对应的数据名称信息
  2. 小数末尾是0的,不显示0,有值才显示 StringFormat
  3. Laya微信小游戏的开放域
  4. [LeetCode] 602. Friend Requests II: Who Has Most Friend? 朋友请求 II: 谁有最多的朋友?
  5. kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
  6. Kubernetes 存储卷管理 PV&amp;PVC(十)
  7. Thread 设置 IsBackground true false 的 运行差别
  8. 常见的几种异常类型 Exception
  9. Windows平台为 ElasticSearch 6.x 安装 Head 客户端插件
  10. Linux学习-文件基础权限