linux-shell編程基礎

來源:互聯網
上載者:User
第1章 shell基礎1.1 什麼是shell

Shell是一個命令直譯器,它在作業系統的最外層,負責直接與使用者對話,把使用者的輸入解釋給作業系統,並處理各種各樣的作業系統的輸出結果,輸出螢幕返回給使用者。

1.1.1 shell對話方式

互動的方式:從鍵盤輸入命令,通過/bin/bash的解析,可以立即得到Shell的回應,一問一答的方式

非互動式:shell指令碼 

1.2 為什麼使用shell編程

作為一個合格的營運人員必須掌握一種或一種以上的指令碼語言,shell編程則是實現Linux/UNIX系統管理及自動化營運所必備的重要工具,可以把繁瑣重複的命令寫到shell指令碼中執行,節約時間,有效提高營運人員的工作效率,減少不必要的重複工作時間。

1.3 系統中的shell

linux系統預設shell是bash

[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=? 未知數(變數)

一個未知數,隨時可以變化的量叫變數

2.2 變數的分類2.2.1 普通變數(局部變數)

只能在當前環境下使用,可以通過export命令臨時把普通變數變為環境變數使用

[root@zeq ~]# ip=10.0.0.201     給變數賦值(把資料存放到變數中)[root@zeq ~]# echo $ip10.0.0.201
2.2.2 環境變數(全域變數)

1.大寫

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 指令碼編輯使用vim3.1.3 選擇解譯器

在執行bash指令碼的時候,核心會根據"#!"後的解譯器來確定該用那個程式解釋這個指令碼中的內容。

[root@zeq ~]# vim /server/scripts/cal.sh    #!/bin/bash
3.1.4 檔案名稱書寫

檔案名稱一定要有意義,方便看出是幹嘛用的指令碼,並且以.sh結尾

3.1.5 書寫指令碼的規範和習慣

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

2、  書寫指令碼要用vim編輯,

  大量刪除

  批量增加

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

  2.選擇 批量增加的範圍

  3.按 shift + i 進行修改

  4.按esc 退出等等

3、 指令檔名稱以.sh結束

4、 指令碼開頭一定要指定解譯器

5、 指令碼中#代表注釋,#後的內容不會執行,不用的命令等可以用#注釋掉,指令碼中盡量不要出現中文注釋以免出現因字元集不同產生亂碼

6、 代碼符號書寫規範

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

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

       3.書寫的代碼符號都是英文IME格式

       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和num20.5
4.1.2 書寫指令碼計算10與20的加減乘除
[root@zeq]# vim cal.sh#!/bin/bash n1=10n2=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.sh30-102000.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-102000.5
4.2 通過read 互動式

read互動式賦予變數內容

read -p "提示資訊:"  變數名字

read -p "提示資訊:"  p

執行之後會把輸入的資訊存放在變數中

[root@zeq /server/scripts]# read -p "input num1:" n1input num1:zeq[root@zeq /server/scripts]# echo $n1zeq
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.shinput num1,num2:10 20         隨便輸入兩個數值,中間要有空格30-102000.5 
4.3 條件運算式  if4.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

 

1、判斷指令碼的參數個數,如果不是2則提示請輸入兩個數字

[root@zeq /server/scripts]# cat pan.sh#!/bin/bash if [ $# -ne 2 ];then   echo "輸入兩個數字"fi

2、 給計算機(參數傳遞)增加一個條件

判斷指令碼的參數個數,

如果不是2則

提示請輸入兩個數字

[root@zeq /server/scripts]# cat cal.sh#!/bin/bash n1=$1n2=$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 }'

3、執行指令碼

[root@zeq /server/scripts]# sh  cal.shUSAGE: cal.sh num1 num2[root@zeq /server/scripts]# sh  cal.sh 120 2014010024006
4.3.5 if雙分支格式指令碼

格式: if [ 條件 ];then

        命令

             else

          命令

fi

 

1、comp.sh輸入兩個數字:

 1.如果n1大於n2

 輸出 n1 > n2

 2.如果n1不大於n2

 輸出 n1 <= n2

[root@zeq /server/scripts]# cat  comp.sh#!/bin/bash n1=$1n2=$2 if [ $n1 -gt $n2 ];then   echo "$n1 > $n2"else   echo "$n1 <= $n2"fi

2、執行指令碼

[root@zeq /server/scripts]# sh comp.sh 10 2010 <= 20[root@zeq /server/scripts]# sh comp.sh 10 1010 <= 10[root@zeq /server/scripts]# sh comp.sh 100 10100 > 10
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.