網站首頁 編程語言 正文
未預期的符號 `then' 附近有語法錯誤: 行 : `then'` if [ -f $i ];then'未預期的符號 `done' 附近有語法錯誤
#!/bin/bash
cd /var/log
sum=0
for i in `ls -r *`
do
??????? if [ -f $i ];then
??????? let sum++
??????? echo "文件名:$i"
??????? fi
done
echo "總文件數量為:$sum"
上面的代碼看起來是一點問題都沒有,但是一旦復制粘貼到linux里面運行就會出現各種奇奇怪怪的問題,如下:
test.sh: 行 6: 未預期的符號 `then' 附近有語法錯誤
test.sh: 行 6: ` if [ -f $i ];then'
test.sh: 行 10: 未預期的符號 `done' 附近有語法錯誤
test.sh: 行 10: `done'
上面的錯誤信息著實是把我給整蒙了,還好我還是相信計算機的嚴謹,認真看了一下報錯信息,發現都是then 或者 done的前面出現了一個反引號,非常奇怪,明明我們就沒寫過反引號進去。
查找了不少資料,最后查到是Windows和linux系統的環境不一樣導致的,解決方式非常簡單粗暴,就是在linux里面刪除對應的代碼重新一個一個敲就好,還有另一個方法是用notepad++里面設置linux環境,這個請讀者自行驗證。
下面看看我的解決過程:
出現如下錯誤
把then那行dd刪除,整行重新輸入,出現新的錯誤,如下:
把done那行刪除,發現沒用,還是報錯,想到done是在一行起始處(并且反引號在done前面),有理由懷疑是上一行的原因,把上一行刪掉重寫(就是 fi),成功通過,如下:
上面只要用sudo運行即可
綜上,找了好久都沒找到原因,因為代碼本來就是對的,只是我懶,直接copy進linux里面運行(誰知道會不兼容呢),所以還是得一個一個敲的穩妥。
原文鏈接:https://www.cnblogs.com/wannacry/archive/2022/12/07/16964566.html
相關推薦
- 2022-12-02 C語言學習之指針的使用詳解_C 語言
- 2023-02-10 rust引用和借用的使用小結_Rust語言
- 2022-09-20 Winform使用FTP實現自動更新_C#教程
- 2022-09-03 pandas?如何保存數據到excel,csv_python
- 2023-03-16 PostgreSQL?復制表的?5?種方式詳解_PostgreSQL
- 2022-09-04 使用Docker容器部署MongoDB并支持遠程訪問及遇到的坑_docker
- 2022-07-18 Maven快照更新策略
- 2022-08-03 python判定文件目錄是否存在及創建多層目錄_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支