day27-shell編程(自動化)

1. 準備工具

添加到/etc/vimrc


autocmd BufNewFile *.py,*.cc,*.sh,*.java,*.bash,Dockerfile,docker-compose.yml exec ":call SetTitle()"func SetTitle()  if expand("%:e") =~ 'sh\|bash'  call setline(1,"#!/bin/bash")call setline(2, "##############################################################")  call setline(3, "# File Name: ".expand("%"))call setline(4, "# Version: V1.0")call setline(5, "# Author: zbl")call setline(6, "# Organization: www.zbl.com")call setline(7, "# Description:")call setline(8, "##############################################################")call setline(9, "")endif  if expand("%") == 'Dockerfile'  call setline(1, "#####################Dockerfile###############################")call setline(2, "##############################################################")  call setline(3, "# File Name: ".expand("%"))call setline(4, "# Version: V1.0")call setline(5, "# Author: zbl")call setline(6, "# Organization: www.zbl.com")call setline(7, "# Description:")call setline(8, "##############################################################")call setline(9, "")call setline(10, "FROM")call setline(11, "LABEL maintaniner='zbl  zbl@qq.com' author=zbl")call setline(12, "CMD []")endif  if expand("%") == 'docker-compose.yml'  call setline(1, "#####################docker-compose###########################")call setline(2, "##############################################################")  call setline(3, "# File Name: ".expand("%"))call setline(4, "# Version: V1.0")call setline(5, "# Author: zbl")call setline(6, "# Organization: www.zbl.com")call setline(7, "# Description:")call setline(8, "##############################################################")call setline(9, "")call setline(10, "version: '3.3'")call setline(11, "services:")call setline(12, "volumes:")endif  
endfunc

  • vim

  • sublime/notepad(大一些腳本使用)

  • 故障案例:windows書寫的腳本上傳到Linux運行,出現錯誤
原因:windows下回車符號是\n\r,linux下回車符號就是\n,執行windows下寫的內容報錯
解決:dos2unix xxx.sh  #windows格式轉換linux格式

2. 腳本基本必會內容

2.1. #!/bin/bash

  • 指定命令解釋器
  • 用于給系統運行或指定服務運行的腳本
  • #! shabang符號

2.2. 運行腳本方法

運行腳本方法

應用場景

bash/sh

書寫的腳本通過sh/bash運行

路徑方法運行

服務軟件運行腳本需要這樣使用

source 或 .

運行腳本,加載帶有變量,自定義函數庫

/etc/profile使用 實現include功能,加載子腳本

3. 變量

  • 普通變量
  • 環境變量
  • 特殊變量

3.1. 普通變量

  • 命名規則
    • 不能以數字開頭
    • 不要使用單獨字母,最好看見變量名字就知道變量作用(memory_total)
  • ${} 引用變量

3.2. 環境變量

  • 全局變量(系統定義的)

環境變量

說明

LANG

語言字符集,export LANG=en_US.UTF-8,localectl永久修改

PS1

命令行格式

PATH

存放命令的路徑

UID

當前的用戶UID,判斷中使用,檢查當前用戶是否為root

  • export創建或修改全局變量

3.3. 特殊變量

3.3.1. 常用必會的特殊變量

  • 腳本中使用

特殊變量

說明

$n

數字,腳本傳參功能,$1表示第一個參數,$2表示第二個參數

$0

腳本名字,有路徑或無路徑

$#

腳本參數的個數,一般與判斷結合做檢查

$*

取出腳本所有參數相當于替你寫了$1,$2,$3......,一般搭配循環

$@

取出腳本所有參數相當于替你寫了$1,$2,$3......,一般搭配循環

$?

上一個命令返回值是否正確,0表示正確,非0表示不正確,腳本判斷使用

[root@ky201 /study]# cat show.sh 
#!/bin/bash
##############################################################
# File Name: show.sh
# Version: V1.0
# Author: zbl
# Organization: www.zbl.com
# Description:
##############################################################cat<<EOF
腳本前三個參數:$1 $2 $3
腳本名字:$0
腳本參數個數:$#
腳本所有參數:$*
腳本所有參數:$@
EOF
[root@ky201 /study]# bash show.sh 1 2 3 4
腳本前三個參數:1 2 3
腳本名字:show.sh
腳本參數個數:4
腳本所有參數:1 2 3 4
腳本所有參數:1 2 3 4
  • 面試題:$n,n大于9會有什么問題?
[root@ky201 /study]# cat show.sh 
#!/bin/bash
##############################################################
# File Name: show.sh
# Version: V1.0
# Author: zbl
# Organization: www.zbl.com
# Description:
##############################################################cat<<EOF
腳本前三個參數:$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11
腳本名字:$0
腳本參數個數:$#
腳本所有參數:$*
腳本所有參數:$@
EOF[root@ky201 /study]# bash show.sh {a..z}
腳本前三個參數:a b c d e f g h i a0 a1
腳本名字:show.sh
腳本參數個數:26
腳本所有參數:a b c d e f g h i j k l m n o p q r s t u v w x y z
腳本所有參數:a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@ky201 /study]# [root@ky201 /study]# bash show.sh {a..z}
腳本前三個參數:a b c d e f g h i j k
腳本名字:show.sh
腳本參數個數:26
腳本所有參數:a b c d e f g h i j k l m n o p q r s t u v w x y z
腳本所有參數:a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@ky201 /study]# 

4. 基礎判斷

4.1. if判斷格式

#單分支判斷
if [ 條件 ];then執行的命令
fiif [ 條件 ]
then執行的命令
fi#雙分支判斷
if [ 條件 ];then滿足條件執行的命令
else不滿足條件執行的命令
fiif [ 條件 ]
then滿足條件執行的命令
else不滿足條件執行的命令
fi

4.2. 條件:比較大小

比較大小

符號

等于

-eq(equal)

不等于

-ne(not equal)

大于

-gt(great then)

大于等于

-ge(great equal)

小于

-lt(less than)

小于等于

-le(less equal)

4.3. 案例

  • 案例01:書寫ping檢查域名/ip的腳本,成功輸出ip/域名可以訪問,否則輸出無法訪問
#!/bin/bash
##############################################################
# File Name: check_ip.sh
# Version: V1.0
# Author: zbl
# Organization: www.zbl.com
# Description:
###############################################################1.vars
ip=$1#1.1 check
if [ $# -ne 1 ];thenecho "use $0 ip/url"exit 1#退出腳本#返回值是1
fi#2.ping
ping -c2 $ip >/dev/null 2>&1#3.if
if [ $? -eq 0 ];thenecho "${ip} 可以訪問"
elseecho "${ip} 不可以訪問"
fi
  • 案例02:檢查指定用戶是否存在,存在輸出用戶存在,不存在輸出用戶不存在。檢查參數個數
#!/bin/bash
##############################################################
# File Name: check_user.sh
# Version: V1.0
# Author: zbl
# Organization: www.zbl.com
# Description:
###############################################################1.vars
user=$1#2.check
if [ $# -ne 1 ];thenecho "use $0 username"exit 1
fi#3.id user
id ${user}>/dev/null 2>&1
if [ $? -eq 0 ];thenecho "用戶存在"
elseecho "用戶不存在"
fi

案例03: 書寫回收站腳本執行rm命令的時候調用mv命令移動指定文件或目錄到/recycyle/目錄下

  1. 編寫腳本
#!/bin/bash
##############################################################
# File Name: recycle.sh
# Version: V1.0
# Author: zbl
# Organization: www.zbl.com
# Description:
###############################################################1.vars
files="$*"#2.check
if [ $# -eq 0 ];thenecho "use rm files dir"exit 1
fi#3.check root
if [ $UID -ne 0 ];thenecho "please use mv"exit 2
fi#4.創建臨時目錄
tmpdir=`mktemp -dp /recycle/`#5.mv
mv ${files} ${tmpdir}#6.輸出結果
echo "文件已經移動到回收站:${tmpdir}"
  1. 使用別名
#臨時使用別名,然后測試腳本
alias rm='bash /server/scripts/recycle.sh'#寫入到/etc/profile文件中使其永久生效
vim /etc/profile
alias rm='bash /server/scripts/recycle.sh'

5. 基礎循環

  • for 循環

5.1. 基本格式

for n in {1..10}
do命令
donefor n in 1 2 3 3 4 5 6 7 8 9 10
doecho $n
done

5.2. 案例

  • 案例01:批量添加用戶
for name in zbl{01..10}
douseradd $name
done

  • 案例02:批量檢查linux系統中可登錄用戶的uid,gid信息
  1. 步驟
1.取出所有linux系統中可登錄用戶名
2.交給for循環
3.對用戶進行檢查,取出uid,gid
4.輸出
  1. 編寫腳本
#!/bin/bash
##############################################################
# File Name: 02-userid.sh
# Version: V1.0
# Author: zbl
# Organization: www.zbl.com
# Description:
###############################################################1.vars
users=`grep '/bin/bash' /etc/passwd | awk -F ':' '{print $1}'`#2.for
for name in $users
douid=`id $name | awk -F '[= ]' '{print $2}'`gid=`id $name | awk -F '[= ]' '{print $4}'`group=`id $name | awk -F '[= ]' '{print $6}'`echo "用戶名:$name,用戶的uid:$uid,用戶的gid:$gid,用戶組信息:$group"
done

  • 案例03:批量檢查ip或url是否可以訪問
#!/bin/bash
##############################################################
# File Name: 03-ip.sh
# Version: V1.0
# Author: zbl
# Organization: www.zbl.com
# Description:
###############################################################1.vars
ips="$*"#2.check
if [ $# -eq 0 ];thenecho "use $0 ip/url"exit 1
fi#3.for
for ip in $ips
doping -c1 $ip >/dev/null 2>&1if [ $? -eq 0 ];thenecho "$ip 可以訪問"elseecho "$ip 不可以訪問"fi
done

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83102.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83102.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83102.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【免殺】C2免殺技術(十五)shellcode混淆uuid/ipv6/mac

針對 shellcode 混淆(Shellcode Obfuscation) 的實戰手段還有很多,如下表所示: 類型舉例目的編碼 / 加密XOR、AES、RC4、Base64、Poly1305、UUID、IP/MAC改變字節特征,避開靜態簽名或 YARA結構偽裝PE Stub、GIF/PNG 嵌入、RTF OLE、UUID、IP/MAC看起來像合法文件/數據,弱…

Vite中定義@軟鏈接

在webpack中可以直接通過符號表示src路徑&#xff0c;但是vite中默認不可以。 如何實現&#xff1a; vite中提供了resolve.alias&#xff1a;通過別名在指向一個具體的路徑 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…

記錄一次opengl顯示不出物體的錯誤原因

是這樣的&#xff0c;我打算學PBR中的IBL章節&#xff0c;即基于圖像的渲染&#xff0c;它的觀點是創建一個大的外景圖片&#xff0c;可以根據圖像中的信息來將環境中的漫反射光和鏡面反射光打在物體上。 但是我在我的程序中創建了一個立方體作為天空盒&#xff0c;我是有兩套…

國產錄播一體機:科技賦能智慧教育信息化

在數字化時代&#xff0c;教育正經歷著前所未有的變革。國產工控機作為信息化教育的核心載體&#xff0c;正在重新定義學習方式&#xff0c;賦能教師與學生&#xff0c;打造高效、互動、智能的教學環境&#xff0c;讓我們一起感受科技與教育的深度融合&#xff01;高能計算機推…

Android Native 之 lmkd進程和kernel kswapd的關聯

lwkd進程屬于native層啟動的一個守護進程&#xff0c;他的作用貫穿android世界的始終。他的另外一個大家都屬于的名字lowmemorykiller。 根據readme的介紹lmkd是用來對android系統內存檢查的守護進程&#xff0c;它通過終止不重要的進程來達到系統穩定運行的狀態。在Linux Kern…

【生活】程序員防猝si指南

note 一、定期體檢二、均衡飲食&#xff0c;多食用對心臟有保護作用的食物三、每周運動四、減壓五、保證睡眠六、戒煙限酒7、控制血壓8、警惕流感攻擊心臟9、關注牙齒健康10、不要抵觸吃藥 文章目錄 note一、定期體檢二、均衡飲食&#xff0c;多食用對心臟有保護作用的食物三、…

245. 2019年藍橋杯國賽 - 數正方形(困難)- 遞推

245. 數正方形&#xff08;困難&#xff09; 2019年藍橋杯國賽 - 數正方形&#xff08;困難&#xff09; 標簽&#xff1a;2019 國賽 遞推 題目描述 在一個 N N N N N N 的點陣上&#xff0c;取其中 4 個點恰好組成一個正方形的 4 個頂點&#xff0c;一共有多少種不同的取…

代碼隨想錄刷題day30

1、零錢兌換II 給你一個整數數組 coins 表示不同面額的硬幣&#xff0c;另給一個整數 amount 表示總金額。 請你計算并返回可以湊成總金額的硬幣組合數。如果任何硬幣組合都無法湊出總金額&#xff0c;返回 0 。 假設每一種面額的硬幣有無限個。 題目數據保證結果符合 32 位帶…

SpringBoot EhCache 緩存

一、EhCache核心原理 層級存儲 堆內緩存&#xff08;Heap&#xff09;&#xff1a;高速訪問&#xff0c;受JVM內存限制堆外緩存&#xff08;Off-Heap&#xff09;&#xff1a;突破JVM堆大小限制&#xff08;直接內存&#xff09;磁盤存儲&#xff08;Disk&#xff09;&#xff…

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的選項之一, 并非唯一 1 先厘清概念 點說明authenticationMethodURLAuthenticationChallenge.protectionS…

盤古信息PCB行業解決方案:以全域場景重構,激活智造新未來

一、破局&#xff1a;PCB行業的時代之問 在數字經濟蓬勃發展的浪潮中&#xff0c;PCB&#xff08;印制電路板&#xff09;作為 “電子產品之母”&#xff0c;其重要性愈發凸顯。隨著 5G、人工智能等新興技術的加速滲透&#xff0c;PCB行業面臨著前所未有的挑戰與機遇。產品迭代…

數據通信與計算機網絡——數據與信號

主要內容 模擬與數字 周期模擬信號 數字信號 傳輸減損 數據速率限制 性能 注&#xff1a;數據必須被轉換成電磁信號才能進行傳輸。 一、模擬與數字 數據以及表示數據的信號可以使用模擬或者數字的形式。數據可以是模擬的也可以是數字的&#xff0c;模擬數據是連續的采用…

循環語句之while

While語句包括一個循環條件和一段代碼塊&#xff0c;只要條件為真&#xff0c;就不斷 循環執行代碼塊。 1 2 3 while (條件) { 語句 ; } var i 0; while (i < 100) {console.log(i 當前為&#xff1a; i); i i 1; } 下面的例子是一個無限循環&#xff0c;因…

藍橋杯第十屆國B 質數拆分

題目描述 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 將 2019 拆分為若干個兩兩不同的質數之和&#xff0c;一共有多少種不同的方法&#xff1f; 注意交換順序視為同一種方法&#xff0c;例如 220172019 與 201722019 …

曼昆《經濟學原理》第九版 第十二章稅收制度的設計

一、稅收基本概念 稅收分類&#xff1a; 比例稅&#xff1a;稅率不隨稅基變化&#xff08;如部分增值稅&#xff09;累進稅&#xff1a;稅率隨稅基增加而上升&#xff08;如個人所得稅&#xff09;累退稅&#xff1a;稅率隨稅基增加而下降&#xff08;如社會保險稅上限&#…

在Spring Boot中集成RabbitMQ的完整指南

前言 在現代微服務架構中&#xff0c;消息隊列&#xff08;Message Queue&#xff09;是實現異步通信、解耦系統組件的重要工具。RabbitMQ 是一個流行的消息中間件&#xff0c;支持多種消息協議&#xff0c;具有高可靠性和可擴展性。 本博客將詳細介紹如何在 Spring Boot 項目…

IDC智能機房整體解決方案

該文檔為 IDC 智能機房整體解決方案,目標是實現機房智能化、可視化、遠程化管理,提升運維效率與客戶服務能力。方案涵蓋物理安全智能化(智能電子鎖,支持遠程控制、權限管理及離線 / 在線授權,兼容 1-3mm 門板厚度等)、監控智能化(人員定位、攝像頭、機柜溫濕度監控、能耗…

Kafka入門-集群基礎環境搭建(JDK/Hadoop 部署 + 虛擬機配置 + SSH 免密+Kafka安裝啟動)

Kafka 簡介 傳統定義&#xff1a;Kafka是一個分布式的基于發布/訂閱模式的消息隊列&#xff0c;應用于大數據實時處理領域。 Kafka最新定義&#xff1a;Apache Kafka是一個開源分布式事件流平臺&#xff0c;被數千家公司用于高性能數據管道、流分析、數據集成和關鍵任務應用…

【仿生機器人】建模—— 圖生3D 的幾個辦法

兩件事&#xff01; 第一件&#xff1a; 強如 Gemini&#xff0c;在多模態和三維空間的理解中&#xff0c;如果不微調去做下游應用&#xff0c;直接 Zero-shot 的 效果是很差的 好處是有多視角圖生3D&#xff0c;效果還可以&#xff0c;但是也沒有很精細&#xff0c;&#xf…

簡約商務通用宣傳年終總結12套PPT模版分享

IOS風格企業宣傳PPT模版&#xff0c;年終工作總結PPT模版&#xff0c;簡約精致扁平化商務通用動畫PPT模版&#xff0c;素雅商務PPT模版 簡約商務通用宣傳年終總結12套PPT模版分享:商務通用年終總結類PPT模版https://pan.quark.cn/s/ece1e252d7df