shell脚本:Syntax error: Bad for loop variable错误解决方法(转)
2024-08-22 06:45:52
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,就不会报错误啦.
最新文章
- java中IO流小解
- activemq 控制面板里的 Number Of Pending Messages、 Messages Enqueued、Messages Dequeued含义
- Struts2基础数据校验和框架校验
- ASP.NET技巧:教你制做Web实时进度条
- UML从需求到实现---类图(2)
- C# 使用 GetOleDbSchemaTable 检索架构信息(表、列、主键等)
- 关于Windows Azure 地缘组(Affinity Groups)
- Uncaught TypeError: Object #<;Object>; has no method &#39;fancybox&#39;
- MFC版美女找茬
- bzoj2286
- c#接口深入一步探究其作用,适合新人了解
- PHP~foreach遍历名单数组~有必要多次观看练习
- 无 new 构造与链式调用
- Java 使用PDFBox提取PDF文件中的图片
- java基础---->;String中的split方法的原理
- C#调试心经
- AngularJS 常用的功能
- js 正则判断字符串下划线的长度
- 小内存VPS apache并发控制参数prefork调优
- HOJ 2133&POJ 2964 Tourist(动态规划)
热门文章
- SQL多个逗号分开的字段值 取对应的数据名称信息
- 小数末尾是0的,不显示0,有值才显示 StringFormat
- Laya微信小游戏的开放域
- [LeetCode] 602. Friend Requests II: Who Has Most Friend? 朋友请求 II: 谁有最多的朋友?
- kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
- Kubernetes 存储卷管理 PV&;PVC(十)
- Thread 设置 IsBackground true false 的 运行差别
- 常见的几种异常类型 Exception
- Windows平台为 ElasticSearch 6.x 安装 Head 客户端插件
- Linux学习-文件基础权限