網站首頁 編程語言 正文
情景再現
最近有一個部署服務,是具有絕對外網隔離的環境,不能構建自動化的發布服務,項目大體完工,但是改動的細節還是很多很小,存在一個頻繁的發版情況。為了方便的發版,我只能基于shell構建一個簡單的自動化腳本
開發環境
腳本編輯工具:win10+vscode
腳本運行環境:centos7
開發過程
shell腳本基礎
Shell是一個用 C 語言編寫的程序。Shell 既是一種命令語言(腳本),又是一種程序設計語言。
簡單理解就是和windos中cmd一樣的一種命令語言,一種批處理的腳本類似的東西。
shell腳本的首行指定了shell腳本解釋器的路徑,而且這個指定路徑只能放在文件的第一行
#!/bin/bash
查看自己linux系統的默認解析:echo $SHELL
[root@localhost ~]# echo $SHELL
/bin/bash
echo 輸出文本,相當于print命令,console命令
echo -e “\033[32m 綠色文字 \033[0m”
會輸出帶有顏色的文字,可以將我們自己的輸出和docker的輸出加以區分
完成代碼塊,運行腳本,輸入鏡像版本,將自動拉取指定版本鏡像并運行創建一個新的容器
#!/bin/bash
cml_version=""
cml_url="registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_2022${cml_version}_1"
sudo echo -e "\033[32m --start-- \033[0m"
sudo echo -e "\033[33m please input version: \033[0m"
read -r cml_version
cml_url="registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_2022${cml_version}_1"
sudo echo -e "\033[33m cml_version: $cml_url \033[0m"
sudo docker pull "$cml_url"
sudo echo -e "\033[32m 1.pull image from route \033[0m"
sudo docker stop c_llpcmlapi
sudo docker rm c_llpcmlapi
sudo echo -e "\033[32m 2.stop&rm c_llpcmlapi \033[0m"
sudo docker rmi i_llpcmlapi
sudo echo -e "\033[32m 3.rmi i_llpcmlapi \033[0m"
sudo docker tag "$cml_url" i_llpcmlapi
sudo echo -e "\033[32m 4.tag image \033[0m"
docker run -di -v /home/llp_docker/llpcmlapi/appsettings.json:/appsettings.json --name c_llpcmlapi -p 8089:80 i_llpcmlapi
sudo echo -e "\033[32m 5.run c_llpcmlapi \033[0m"
sudo docker ps
遇到的問題
報錯:$‘\r’: command not found
解決: 由于shell腳本很簡單,我直接在windos下用記事本寫了一個.sh的文件,執行的時候重視報錯各種錯誤,而且有時可能執行成功,有時會失敗,猜測可能是編碼的問題,于是用vscode打開,重新保存,還是不行,后來了解到原來windows下編譯的shell文件,每一行的結尾是\n\r,而在linux下文件的結尾是\n,所以我們需要替換掉\r
cat -v 顯示window下的回車字符
tr -d ‘\r’ < 原始文件 > 新文件:替換文件中的回車字符
[root@localhost llpcode]# cat -v cmlapi.sh
^M
sudo echo -e "\033[32m --start-- \033[0m"^M
sudo docker pull registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_20220603_1 ^M
sudo echo -e "\033[32m 1.pull image from route \033[0m"^M
sudo docker rmi i_llpcmlapi^M
sudo echo -e "\033[32m 2.rmi i_llpcmlapi \033[0m"^M
sudo docker tag registry.cn-hangzhou.aliyuncs.com/xhgycf/xhg.cml.api:XHG.CML_20220603_1 i_llpcmlapi ^M
sudo echo -e "\033[32m 3.tag image \033[0m"^M
sudo docker stop c_llpcmlapi ^M
sudo docker rm c_llpcmlapi ^M
sudo echo -e "\033[32m 4.stop&rm c_llpcmlapi \033[0m"^M
docker run -di -v /home/llp_docker/llpcmlapi/appsettings.json:/appsettings.json --name c_llpcmlapi -p 8089:80 i_llpcmlapi ^M
sudo echo -e "\033[32m 5.run c_llpcmlapi \033[0m"^M
sudo docker ps [root@localhost llpcode]# tr -d '\r' < cmlapi.sh > cmlapi_.sh
[root@localhost llpcode]# ls
blogcore cmlapi_.sh cmlapi.sh vue_xhg_cml
效果如下
報錯:read without -r will mangle backslashes.
解決:shell腳本缺少權限, chmod +x 腳本名稱 進行權限賦值
報錯:read without -r will mangle backslashes.
解決:Read將解釋空格和換行符之前的反斜杠,通常您只想讀取數據,這就是read -r所做的
報錯:$Permission denied
解決:shell腳本缺少權限, chmod +x 腳本名稱 進行權限賦值
原文鏈接:https://blog.csdn.net/l1158513573/article/details/125126631
相關推薦
- 2022-04-07 Kotlin原理詳析之拓展函數_Android
- 2022-05-18 Python學習之異常中的finally使用詳解_python
- 2023-03-11 Golang的Fork/Join實現代碼_Golang
- 2022-08-17 go?Cobra命令行工具入門教程_Golang
- 2022-06-07 Python?urllib庫的使用指南詳解_python
- 2022-03-15 linux系統中計劃任務介紹_Linux
- 2023-01-02 Kotlin?RadioGroup與ViewPager實現底層分頁按鈕方法_Android
- 2022-06-12 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同步修改后的遠程分支