linux-shell編程基礎

第1章 shell基礎

1.1 什麼是shell

Shell是一個命令解釋器,它在操做系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操做系統,並處理各類各樣的操做系統的輸出結果,輸出屏幕返回給用戶。linux

1.1.1 shell對話方式

交互的方式:從鍵盤輸入命令,經過/bin/bash的解析,能夠當即獲得Shell的迴應,一問一答的方式shell

非交互式:shell腳本 編程

1.2 爲何使用shell編程

做爲一個合格的運維人員必須掌握一種或一種以上的腳本語言,shell編程則是實現Linux/UNIX系統管理及自動化運維所必備的重要工具,能夠把繁瑣重複的命令寫到shell腳本中執行,節約時間,有效的提升運維人員的工做效率,減小沒必要要的重複工做時間。vim

1.3 系統中的shell

linux系統默認shell是bashbash

[root@zeq ~]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh  

第2章 變量

2.1 什麼是變量

x+y=20     x=10  y=? 未知數(變量)less

一個未知數,隨時能夠變化的量叫變量運維

2.2 變量的分類

2.2.1 普通變量(局部變量)

只能在當前環境下使用,能夠經過export命令臨時把普通變量變爲環境變量使用工具

[root@zeq ~]# ip=10.0.0.201     給變量賦值(把數據存放到變量中)

[root@zeq ~]# echo $ip

10.0.0.201

2.2.2 環境變量(全局變量)

1.大寫spa

2.系統定義的操作系統

3.在大部分地方可使用

2.2.3 特殊變量

$1   $2   $數字        $後數字是幾表明shell腳本第幾個參數

$#                           shell腳本中參數的個數

                               判斷腳本的參數個數

$?                          上一個命令的執行結果(返回值)

                              0             執行正確

                              非0           執行失敗

$0                          腳本文件名

第3章 shell腳本的書寫規範

3.1.1 腳本存放位置

爲了防止腳本亂放,統一存放在/server/scripts/中

建立目錄

[root@zeq ~]# mkdir -p /server/scripts/

[root@zeq ~]# cd /server/scripts/

3.1.2 腳本編輯使用vim

3.1.3 選擇解釋器

在執行bash腳本的時候,內核會根據"#!"後的解釋器來肯定該用那個程序解釋這個腳本中的內容。

[root@zeq ~]# vim /server/scripts/cal.sh    

#!/bin/bash

3.1.4 文件名書寫

文件名稱必定要有意義,方便看出是幹嗎用的腳本,而且以.sh結尾

3.1.5 書寫腳本的規範和習慣

一、  放在統一目錄下,方便查找

二、  書寫腳本要用vim編輯,

  批量刪除

  批量增長

  1.進入批量編輯模式(可視塊)esc下ctrl+v

  2.選擇 批量增長的範圍

  3.按 shift + i 進行修改

  4.按esc 退出等等

三、 腳本文件名稱以.sh結束

四、 腳本開頭必定要指定解釋器

五、 腳本中#表明註釋,#後的內容不會執行,不用的命令等能夠用#註釋掉,腳本中儘可能不要出現中文註釋以避免出現因字符集不一樣產生亂碼

六、 代碼符號書寫規範

     1.成對的符號必定要都寫出來再添加內容,避免遺忘漏寫;如 "" '' []等

     2.流程控制語句一次書寫完,再添加內容;(if 條件 ; then  內容;fi)

       3.書寫的代碼符號都是英文輸入法格式

       4.經過縮進讓代碼易讀

第4章 shell練習

書寫一個計算器腳本

4.1 數字計算方法

[root@zeq ~]# awk  'BEGIN{print 1/2}'

0.5

4.1.1 命令行中的變量 放在awk中使用

awk -v變量=賦值       變量名稱本身定義

[root@zeq ~]# awk -vnum1=10  -vnum2=20 'BEGIN{print num1/num2 }'    這裏變量爲num1和num2

0.5

4.1.2 書寫腳本計算10與20的加減乘除

[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

4.1.3 定義特殊變量 經過命令行傳遞參數方式進行計算

[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

4.2 經過read 交互式

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

4.2.1 經過read命令實現 n1 n2賦值 進行計算

[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 

4.3 條件表達式  if

4.3.1 判斷目錄、文件是否存在

[ -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

4.3.2 比大小

-eq         equal         ==

-ne     not equal         !=

-gt     great than        >

-ge     great equal       >=

-lt     less  than        <

-le     less  equal       <=

4.3.3 比大小舉例

[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

4.3.4 if單分支格式腳本

格式: 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

4.3.5 if雙分支格式腳本

格式: 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
相關文章
相關標籤/搜索