幾例實用的Shell指令碼

千鋒Python唐小強發表於2020-07-10

日常工作中,經常編寫一些shell命令或指令碼以完成重複性操作,本文分享了最近用到的幾例shell實用指令碼。

1 特殊檔名的遠端複製

伺服器之間複製檔案經常使用scp命令,其命令格式:

(1)scp filename [user@]host:dir

(2)scp [user@]host:dir1/filenamedir2

格式(1)將本地檔案filename複製到遠端伺服器host的dir目錄下,格式(2)將遠端伺服器host的dir1目錄下的檔案filename,複製到本地dir2目錄下。

如果複製的檔名包含特殊字元,比如ecs-eos-base:1.0.tar,冒號:屬於特殊字元。直接使用格式(1)的命令進行複製,命令將ecs-eos-base識別為主機名稱而命令執行報錯,如下:

[root@PHY91 docker]
# scp ecs-eos-base:1.0.tar root
@PHY94:/root/docker/


ssh: Could not resolve hostname ecs-eos-base: Temporary failure in name resolution

此時使用./表示當前目錄即可解決該報錯,命令如下:


[root@PHY91 docker]# 
scp ./
ecs-eos-base
:1.0.tar 
root@
PHY94:/
root/
docker/


ecs-eos-base :1.0.tar 100% 84MB 172 .7MB/ s 00 :00

使用./代表當前目錄,scp命令就不會將ecs-eos-base識別為主機名稱。

2 Base64編碼和解碼

在Centos或Redhat Linux作業系統中,如果要進行字串的Base64編碼和解碼,可以使用base64命令即可簡單實現。

(1)編碼

[root@PHY91 ~]
# echo “PHY91” | base64


UEhZOTEK

(2)解碼

[root@PHY91 ~]
# echo “UEhZOTEK” | base64 -d


PHY91

base64既可以編碼解碼字串,也可以對檔案內容進行編碼和解碼。-d引數是表示解碼。

對檔案編碼解碼命令如下:


[root@PHY91 test]# 
echo “12345” > 
test
.txt


[root@PHY91 test]# base64 test .txt

MTIzNDUK

[root@PHY91 test]# base64 test .txt > test2 .txt

[root@PHY91 test]# more test2 .txt

MTIzNDUK

[root@PHY91 test]# base64 -d test2 .txt

12345

3 版本號自增長的實現

使用docker build進行應用映象構建時,為便於映象版本管理,每次構建的映象版本號會增加1。可以使用指令碼實現版本號的自增1,首先建立一個version.txt檔案,內容如下:

[eos@host-132 eos]$ more version.txt

1.0.0

獲取版本號命令如下:

version=cat version.txt

版本號賦值給version變數。

版本號自動增加1,指令碼命令如下:

echo $version | awk -F’.’ ‘{print($1"."$2"."($3+1));}’ > version.txt

命令說明:

(1)使用awk命令,分隔符為點“.”;

(2)$1,$2和$3分別是版本號的第1,2,3個數字;

(3)$3+1表示版本號增加1。

4 sed配置執行環境

在動靜完全分離的web應用專案中,前端使用nginx部署靜態資源即可,專案前端程式碼的基準URL(baseUrl)需要根據不同執行環境(開發、測試、生產)進行相應的修改,例如baseUrl賦值的js程式碼如下:

define([“jquery”], 

function (
$) {


return {
幾例實用的Shell指令碼


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69923331/viewspace-2703731/,如需轉載,請註明出處,否則將追究法律責任。

相關文章