syntax error near unexpected token `then' ./sleep.sh: line 8: ` then let count++;'

本文详细解析了一个Shell脚本中出现的语法错误,并提供了修正方案。初学者可以从中学习Shell脚本的基本语法,避免常见错误。

从书上抄的个shell脚本 sleep.sh

如下:

echo -n count:
tput sc

count=0;
while true;
do
  if [ $count   -lt  40 ]
  then let count++;
       sleep 1;
       tput rc
       tput ed
       echo -n $count;
  else exit 0;
  fi
done
~

执行后报错:

count:./sleep.sh: line 8: syntax error near unexpected token `then'
./sleep.sh: line 8: `  then let count++;'

 

刚开始学习对shell脚本语法不清楚,原因如下:

1.if后要有空格

2.[] 中括号的开头和结尾要有空格!

3. [ $count   -lt  40 ]中括号中的$1和-eq和"root"之间不需要空格!

 

========================

echo -n count:
tput sc

count=0;
while true;
do
  if [ $count-lt40 ]
  then let count++;
       sleep 1;
       tput rc
       tput ed
       echo -n $count;
  else exit 0;
  fi
done


 

### Redis 脚本中 `syntax error near unexpected token 'fi'` 的解决方法 在脚本编写过程中,出现 `syntax error near unexpected token 'fi'` 通常是因为脚本语法不符合 Bash 的规范[^3]。以下是可能导致该问题的原因及解决方法: #### 1. **缩进或换行问题** - 在 Bash 脚本中,`if``fi` 必须正确配对,并且语句之间不能有多余的空格或换行符。 - 确保 `if``fi` 之间的逻辑结构完整,例如: ```bash if [ condition ]; then # 执行命令 fi ``` 如果条件部分缺少分号 `;` 或者换行不正确,可能会导致语法错误。 #### 2. **括号和引号的使用** - 检查条件表达式中的括号是否匹配,例如 `[ ]``[[ ]]`。 - 如果使用了双括号 `[[ ]]`,则需要确保内部逻辑符合 Bash 的语法规则。 - 示例代码: ```bash if [[ $var -eq 0 ]]; then echo "Variable is zero" fi ``` #### 3. **脚本文件编码问题** - 如果脚本文件包含不可见字符(如 BOM),可能会导致解析错误。 - 使用以下命令检查并修复文件编码: ```bash # 检查文件编码 file redis2.sh # 转换为 Unix 格式 dos2unix redis2.sh ``` #### 4. **执行方式问题** - 如果脚本通过 `sh` 执行而非 `bash`,可能会导致某些 Bash 特性无法正常工作。 - 确保脚本的第一行为正确的解释器声明: ```bash #!/bin/bash ``` #### 5. **调试脚本** - 使用 `-x` 参数运行脚本以查看执行过程中的详细信息: ```bash bash -x redis2.sh ``` - 这将帮助定位具体出错的位置。 --- ### 示例修复代码 假设原始脚本如下: ```bash if [ $status == "active" ] fi ``` 修复后的代码应为: ```bash #!/bin/bash if [ "$status" == "active" ]; then echo "Service is active" fi ``` 注意以下几点: - 条件表达式两侧需添加空格。 - 使用引号包裹变量 `$status`,避免变量为空时导致语法错误。 - 添加分号 `;` 或换行以确保语法正确。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值