shell
手工部署專案
自動化部署專案
1、shell簡介
什麼是shell
shell是乙個命令直譯器,是乙個程式/bin/bash,解釋linux的命令
shell互動式命令使用
開啟終端,一行行敲命令
shell指令碼
一系列的命令組成的檔案,結合shell語法
shell指令碼注釋
1、單行注釋 #
2、多行注釋
:<< 字元 。。。。。。
字元:<< b 。。。。。。
。。。。。。
b2、指令碼執行方式
bash /path/to/script-name 或 /bin/bash /path/to/script-name (強烈推薦使用)
/path/to/script-name 或 ./script-name (當前路徑下執行指令碼)
source script-name 或 . script-name (注意「.「點號)
3、變數
本地變數
方式一: name=wang
變數名=變數值
重點:變數值必須是乙個整體,中間沒有特殊字元
方式二:name='wang'
變數名='變數值'
重點:我看到的內容,我就輸出什麼內容
方式三:name="wang"
變數名="變數值"
區別:myname='is $name' 不會解析變數
myname="is $name" 會解析變數
(重點)shell執行環境
開乙個終端是乙個shell環境
bash執行乙個shell指令碼,會在新的shell環境執行
source 執行指令碼時,不會新開shell環境
能與當前終端共享shell環境
(重點)命令變數
1、 name=`ls`
2、 name=$(pwd)
注意:把命令執行的結果賦值給變數
全域性變數
1、name=wang
export name
2、export name=wang
如果想讓變數在任何終端都能使用,修改檔案
vi ~/.bashrc
追加export name=wang
source ~/.bashrc
重啟作業系統
變數檢視
"$"場景:
標準使用方式
取消變數
unset 變數名
4、內建變數(重點)
$0 獲取當前執行的shell指令碼檔名
$n 獲取當前執行的shell指令碼的第n個引數值,n=1..9,當n為0時表示指令碼的檔名,如果n大於9就要用大 括號括起來$
$# 獲取當前shell命令列中引數的總個數
$? 獲取執行上乙個指令的返回值(0為成功,非0為失敗)
如果執行的是乙個指令碼
bash hh.sh
$?返回的是hh.sh中最後一條命令的結果
字串精確擷取
格式:$
示例:$ 從第1個字元開始,擷取5個字元
$ 從第6個字元開始,擷取5個字元
$ 從倒數第6個字元開始,擷取之後的3個字元
預設值$
name=''
$ 返回 hh
name='wang'
$ 返回 wang
$name=''
$ 返回 hh
name='wang'
$ 返回 hh
5、測試語句(重點)
1、test 1 = 2
2、[ 1 = 2 ]
注意:=左右必須有空格,左右必須有空格
使用echo $? 返回0代表成功,1代表失敗
6、條件表示式(重點)
命令1 && 命令2
如果命令1執行成功,那麼我才執行命令2 -- 夫唱婦隨
如果命令1執行失敗,那麼命令2也不執行
命令1 || 命令2
如果命令1執行成功,那麼命令2不執行 -- 對著幹
如果命令1執行失敗,那麼命令2執行
[ -f hello.sh ] 判斷是否是檔案
[ -d hello.sh ] 判斷是否是資料夾
[ -x hello.sh ] 判斷是否可執行
[ -x hello.sh ] && [ -f hello.sh ] 判斷是否是可執行檔案
數值比較
n1 -eq n2 相等
n1 -gt n2 大於
n1 -lt n2 小於
n1 -ne n2 不等於
字串比較
str1 == str2 str1和str2字串內容一致
str1 != str2 str1和str2字串內容不一致,!表示相反的意思
數值計算
1、$((a+b))
2、let a=$a+1
7、符號
重定向命令 > 檔案
把命令執行的結果中正確的資訊放到檔案中
任何命令執行右兩種結果,1代表正確,2代表錯誤
bash hh.sh >/dev/null 2>&1 &
前面&符號代表引用,後面&符號代表後台執行
linux 四劍客
grep 查詢檔案內容
grep -nr hello .
find 根據關鍵字查詢檔案
find . -name '*sh'
sed 行編輯工具,以行為單位
替換sed -i "2s#查詢的內容#替換的內容#1" sed.txt
查詢第二行,只改找到的第乙個值
sed -i "s#查詢的內容#替換的內容#g" sed.txt
s前不指定行是處理所有行,列寫g代表處理所有列
插入sed -i "1i\hello" sed.txt
在第1行前插入一行
追加sed -i "1,3a\hello" sed.txt
在第1,2,3行後面都新增一行
刪除sed -i "3d" sed.txt
刪除第三行
awk 分析工具,按行處理
預設把資料按照空格或tab,拆分資料
awk 'nr==1 ' awk.txt
nr==1 代表只處理第一行
awk -f ':' '' awk2.txt
-f ':' 代表把資料按照:拆分
awk 'begin ' awk2.txt
fs代表輸入的資料按照什麼拆分,ofs代表輸出的內容的分隔符
請繼續** shell指令碼二鏈結
Shell指令碼 一
1.特殊變數 1 2 表示指令碼後接的引數值 引數的數量 所有引數 0 指令碼名 程序號 退出碼2.條件判斷 2.1.if elif else語句 bin bash if condition1 condition2 then text1 elif condition3 then text2 else...
shell指令碼(一)
1 列印九九乘法表 root centos7 scripts vim 99chengfb.sh bin bash for i in do for j in seq 1 i do for j in eval echo do for j in eval echo do result j i echo e...
shell指令碼(一)
shell 1.概述 shell是乙個命令列直譯器,它接收應用程式 使用者命令,然後呼叫作業系統核心 還是乙個功能相當強大的程式語言,易編寫.易除錯.靈活性強 2.shell解析器 檢視linux提供的shell解析 cat etc shells sh和 bash是常用的 bash包含了其他的功能,...