shell就是解決我們運維工作中經常重復性的工作,我們將工作中每天要干的重復性的工作放在一個腳本中,然后運行,解決了大部分的重復性的工作,可以做更多的其它事情。
寫shell的標準程序
*.sh ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 腳本的名字后面一般要加.sh的后綴
#!/bin/bash ? ? ? ? ? ? ? ? ? ? ? ? ?你用什么是什么shell寫的腳本
#Autor : xxx ? ? ? ? ? ? ? ? ? ? ? ? 你的名字
#Data:xxxx ? ? ? ? ? ? ? ? ? ? ? ? ? 創建腳本的時間
#Descripton:xxxx ? ? ? ? ? ? ? ?描述這個腳本是干什么用的
運行shell腳本的方法
1.bash ?*.sh ? ? ? ? ? ? ? ? ? ? ? ? ? 用bash ?執行
2.chmod +x *.sh ? ? ? ? ? ? ? ? ?給shell腳本加執行權限
3.cat ?*.sh |bash ? ? ? ? ? ? ? ? ? ?加管道符執行
4./data/*.sh ? ? ? ? ? ? ? ? ? ? ? ? 用絕對路徑執行
5.http://ip/*.sh|bash ? ? ? ? 遠程調用服務器的腳本執行
6.將腳本放到任意一個$PATH變量里面的路徑下面
bash -n ?*.sh ? ? ? ? ? ? ? ? ? ? ? ? 檢查腳本中的語法錯誤
bash ?-x ?*.sh ? ? ? ? ? ? ? ? ? ? ? ?跟蹤調試腳本
如果命令能識別變量就不用加$,如果不能就要加$
變量分為系統自帶的只讀變量和自定義的變量,系統自帶的只讀變量是不可更改的
自定義變量命名規則
1.不能使用系統的保留名字
2.只能使用數字,字母還有下劃線,但是數字不能開頭
3.設置變量的名字要見名知義
4.統一命名規則,大駝峰,就是所有的單詞首字母大寫
bash中的變量一般分為:局部變量 ;環境(全局)變量;本地變量;位置變量;特殊變量
局部變量:
局部變量只能對當前shell執行,不能在其它shell進程執行,不能在父進程和子進程執行
例:name=xixi ? ? ? ? ? ? ? ?給xixi設置一個變量名字為$name
name=$USER ? ? ? ? ?可以引用變量
name=`hostname` ?可以引用命令
set :可以查看已經定義的所有變量
unset 變量 ?:刪除變量,當我們執行完shell的時候會留下許多不用的垃圾變量,當過去很長的時間會在系統內留下許多的垃圾變量,會大量的占用系統的內存,建議用完變量以后就刪除。
echo $$ ?可以查看當前的進程編號
echo $PPTD 可以查看父進程的編號
pstree -p ? ? ? 可以查看所有進程的編號
環境(全局)變量
全局變量能傳到子進程,但是不能傳到父進程,在變量附加完成以后要聲明這個是全局變量 export
例 :name=xixi ? ? export $name ? 或 ?export ?name=xixi
env可以查看變量
環境變量
環境變量是bash自己建的特殊變量,能直接調用
例:$UID ?$PATH $SHELL ……
只讀變量和位置變量
只讀變量是不能修改和刪除的 ?readonly -p ?或declare -r 查看只讀變量
readonly ? name=xixi ? 聲明一個只讀變量 ,只讀變量的生命周期一般是當前進程的結束
位置變量是讓寫的腳本更靈活,加不同的參數,執行不同的功能
在腳本代碼中調用通過命令行傳遞給腳本的參數
例:$1 ? $2 ? $3 …. 分別對應的a ? b ? c ?….. ? 它對應的可以是文件也可以對應目錄
$* :所有字符的參數
$@:所有字符的參數
$#:所有參數的個數
$0 :代表腳本的名字
shift:換位符,當一個程序執行完成以后整體的參數會往左移,默認移一位,也可以更改,也就是說$1對應的a執行完成以后,會自動的往左移一位,$1對應的變成b繼續執行
退出狀態
echo $? ?查看腳本成不成功
0代表成功,1-255代表失敗
echo $? 的判斷是移最后一條命令的結果為準,成功的話返回值是0,不成功返回值是1-255
返回的值也可以修改 例:exit 10 ?就是將他返回的值改成了10 ,以后返回的特定的值代表特定的內容
算術運算
bash中的算術運算 let
例: 賦值 ?a=10 ? ? b=20
let ? c=a+b ? ? ?或 ? ?c=$[a+b] ? ? ? 或 c=((a+b))
可以用 echo $c 查看結果
邏輯運算
0&0 =0 假與假 是假
0&1 =0 假與真 是假
1&0 =0 真與假 是假
1&1= 1 真與真 是真
0 | 0 = 0 假或假 是假
0 | 1 = 1 假或真 是真
1 | 0 = 1 真或 假 是真
1 | 1 = 1 真或真 是真
短路與 && 短路或 | |
0&&0 =0
0&&1 =0
1&&0 =0
1&&1= 1
chdm1 && chdm2 如果命令1為假 ,命令2 不需要執行 反之命令1為真,需要執行命令2
chdm1 | | chdm2 如果命令1為真,命令2不需要執行 反之命令1為假,命令2不需要執行
條件測試
test 判斷表達式是否成立
?asd=www
?test $qwe = $asd
?echo $?
判斷變量qwe和asd變量的值是否相同,相同得0,不同的1到255
或 ??[ ?$qwe = $asd ?]
判斷字符串的長度
[ ? -z ? $var ?] ? 判斷var的長度是不是為0,0就是沒有存東西
[ -n $var ] 或 [ $var ] 判斷var是不是非空,0代表非空里面有東西,其他代表空
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/95957