Shell是一個命令解釋器,它在操做系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操做系統,並處理各類各樣的操做系統的輸出結果,輸出屏幕返回給用戶。linux
交互的方式:從鍵盤輸入命令,經過/bin/bash的解析,能夠當即獲得Shell的迴應,一問一答的方式shell
非交互式:shell腳本 編程
做爲一個合格的運維人員必須掌握一種或一種以上的腳本語言,shell編程則是實現Linux/UNIX系統管理及自動化運維所必備的重要工具,能夠把繁瑣重複的命令寫到shell腳本中執行,節約時間,有效的提升運維人員的工做效率,減小沒必要要的重複工做時間。vim
linux系統默認shell是bashbash
[root@zeq ~]# cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/dash /bin/tcsh /bin/csh
x+y=20 x=10 y=? 未知數(變量)less
一個未知數,隨時能夠變化的量叫變量運維
只能在當前環境下使用,能夠經過export命令臨時把普通變量變爲環境變量使用工具
[root@zeq ~]# ip=10.0.0.201 給變量賦值(把數據存放到變量中) [root@zeq ~]# echo $ip 10.0.0.201
1.大寫spa
2.系統定義的操作系統
3.在大部分地方可使用
$1 $2 $數字 $後數字是幾表明shell腳本第幾個參數
$# shell腳本中參數的個數
判斷腳本的參數個數
$? 上一個命令的執行結果(返回值)
0 執行正確
非0 執行失敗
$0 腳本文件名
爲了防止腳本亂放,統一存放在/server/scripts/中
建立目錄
[root@zeq ~]# mkdir -p /server/scripts/ [root@zeq ~]# cd /server/scripts/
在執行bash腳本的時候,內核會根據"#!"後的解釋器來肯定該用那個程序解釋這個腳本中的內容。
[root@zeq ~]# vim /server/scripts/cal.sh #!/bin/bash
文件名稱必定要有意義,方便看出是幹嗎用的腳本,而且以.sh結尾
一、 放在統一目錄下,方便查找
二、 書寫腳本要用vim編輯,
批量刪除
批量增長
1.進入批量編輯模式(可視塊)esc下ctrl+v
2.選擇 批量增長的範圍
3.按 shift + i 進行修改
4.按esc 退出等等
三、 腳本文件名稱以.sh結束
四、 腳本開頭必定要指定解釋器
五、 腳本中#表明註釋,#後的內容不會執行,不用的命令等能夠用#註釋掉,腳本中儘可能不要出現中文註釋以避免出現因字符集不一樣產生亂碼
六、 代碼符號書寫規範
1.成對的符號必定要都寫出來再添加內容,避免遺忘漏寫;如 "" '' []等
2.流程控制語句一次書寫完,再添加內容;(if 條件 ; then 內容;fi)
3.書寫的代碼符號都是英文輸入法格式
4.經過縮進讓代碼易讀
書寫一個計算器腳本
[root@zeq ~]# awk 'BEGIN{print 1/2}' 0.5
awk -v變量=賦值 變量名稱本身定義
[root@zeq ~]# awk -vnum1=10 -vnum2=20 'BEGIN{print num1/num2 }' 這裏變量爲num1和num2 0.5
[root@zeq]# vim cal.sh #!/bin/bash n1=10 n2=20 awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
執行腳本
[root@zeq /server/scripts]# sh cal.sh 30 -10 200 0.5
[root@zeq /server/scripts]# vim cal.sh #!/bin/bash n1=$1 第一個參數 n2=$2 第二個參數 awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
[root@zeq /server/scripts]# sh cal.sh 10 20 後面要跟上兩個參數才能執行成功,參數以前加空格 30 -10 200 0.5
read交互式賦予變量內容
read -p "提示信息:" 變量名字
read -p "提示信息:" p
執行以後會把輸入的信息存放在變量中
[root@zeq /server/scripts]# read -p "input num1:" n1 input num1:zeq [root@zeq /server/scripts]# echo $n1 zeq
[root@zeq /server/scripts]# vim cal.read.sh #!/bin/bash read -p "input num1,num2:" n1 n2 一條命令直接定義兩個變量 awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
執行腳本
[root@zeq /server/scripts]# sh cal.read.sh input num1,num2:10 20 隨便輸入兩個數值,中間要有空格 30 -10 200 0.5
[ -d /data ]
[ -f /data ]
注意格式:[空格-f /data空格] []裏面兩端必須有空格,中間寫內容
[root@zeq /server/scripts]# [ -d /data ] [root@zeq /server/scripts]# echo $? $?特殊變量,0表明執行正確,非0執行失敗 0 [root@zeq /server/scripts]# [ -d /data123 ] [root@zeq /server/scripts]# echo $? 1
-eq equal ==
-ne not equal !=
-gt great than >
-ge great equal >=
-lt less than <
-le less equal <=
[root@zeq /server/scripts]# [ 10 -eq 10 ] [root@zeq /server/scripts]# echo $? 0 [root@zeq /server/scripts]# [ 10 -gt 10 ] [root@zeq /server/scripts]# echo $? 1 [root@zeq /server/scripts]# [ 10 -ge 10 ] [root@zeq /server/scripts]# echo $? 0
格式: if [ 條件 ];then
命令
fi
一、判斷腳本的參數個數,若是不是2則提示請輸入兩個數字
[root@zeq /server/scripts]# cat pan.sh #!/bin/bash if [ $# -ne 2 ];then echo "輸入兩個數字" fi
二、 給計算器(參數傳遞)增長一個條件
判斷腳本的參數個數,
若是不是2則
提示請輸入兩個數字
[root@zeq /server/scripts]# cat cal.sh #!/bin/bash n1=$1 n2=$2 if [ $# -ne 2 ];then echo "USAGE: $0 num1 num2" $0文件名 exit exit 退出的意思 fi awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1+num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1-num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1*num2 }' awk -vnum1=$n1 -vnum2=$n2 'BEGIN{print num1/num2 }'
三、執行腳本
[root@zeq /server/scripts]# sh cal.sh USAGE: cal.sh num1 num2 [root@zeq /server/scripts]# sh cal.sh 120 20 140 100 2400 6
格式: if [ 條件 ];then
命令
else
命令
fi
一、comp.sh輸入兩個數字:
1.若是n1大於n2
輸出 n1 > n2
2.若是n1不大於n2
輸出 n1 <= n2
[root@zeq /server/scripts]# cat comp.sh #!/bin/bash n1=$1 n2=$2 if [ $n1 -gt $n2 ];then echo "$n1 > $n2" else echo "$n1 <= $n2" fi
二、執行腳本
[root@zeq /server/scripts]# sh comp.sh 10 20 10 <= 20 [root@zeq /server/scripts]# sh comp.sh 10 10 10 <= 10 [root@zeq /server/scripts]# sh comp.sh 100 10 100 > 10