Shell編程規範與變量

Shell腳本的概念

  • 將要執行的命令按順序保存到一個文本文件
  • 給該文件可執行權限,便可運行
  • 可結合各種Shell控制語句以完成更復雜的操作

Shell腳本應用場景

  • 重複性操作
  • 批量事務處理
  • 自動化運維
  • 服務運行狀態監控
  • 定時任務執行
  • .......

Shell的作用——命令解釋器,“翻譯官”

  • 介於系統內核與用戶之間,負責解釋命令行

用戶的登錄Shell

  • 登錄後默認使用的Shell程序,一般爲/bin/bash
  • 不同Shell的內部指令、運行環境等會有所區別

    [root@localhost ~]# cat /etc/shells
    /bin/sh
    /bin/bash
    /sbin/nologin
    ......

    編寫腳本代碼

  • 使用vi文本編輯器
  • 每行一條Linux命令,按執行順序依次編寫
[root@localhost ~]# vim first.sh
cd /boot/
pwd
ls -lh vml*

賦予可執行權限

  • 使腳本具有可執行屬性
[root@localhost ~]# chmod +x first.sh        

執行腳本文件

  • 方法一:腳本文件路徑(絕對路徑與相對路徑)

    [root@localhost ~]# ./first.sh          //必須擁有x(執行)權限,執行文件,但不會改變所在路徑
  • 方法二:sh腳本文件路徑

    [root@localhost ~]# sh /first.sh      //執行文件,但不會改變所在路徑
  • 方法三:source腳本文件路徑

    [root@localhost ~]# source /first.sh
  • 方法四:. 腳本文件路徑

    [root@localhost ~]# . /first.sh

更完善的腳本構成

  • 腳本聲明
  • 註釋信息
  • 可執行語句
    [root@localhost ~]# vim /first.sh
    #!/bin/bash
    # This is my first Shell-Script.
    cd /boot
    echo "當前的目錄位於:”                 //輸出友好提示信息
    pwd
    echo "其中以vmI開頭的文件包括:”
    Is -Ih vml*

    重定向與管道操作

交互式硬件設備

  • 標準輸入:從該設備接收用戶輸入的數據
  • 標準輸出:通過該設備向用戶輸出數據
  • 標準錯誤:通過該設備報告執行出錯信息
類型 設備文件 文件描述編號 默認設備
標準輸入 /dev/stdin 0 鍵盤
標準輸出 /dev/stdout 1 顯示器
標準錯誤 /dev/stderr 2 顯示器

重定向操作

類型 操作符 用途
重定向輸入 < 從指定的文件讀取數據,而不是從鍵盤輸入
重定向輸出 > 將輸出結果保存到指定的文件(覆蓋原有內容)
>> 將輸出結果追加到指定的文件
標準錯誤輸出 2> 將錯誤信息保存到指定的文件(覆蓋原有內容)
2>> 將錯誤信息追加到指定的文件中
混合輸出 &> 將標準輸出、標準錯誤的內容保存到同一個文件中

管道操作符號“|”

  • 將左側的命令輸出結果,作爲右側命令的處理對象

    cmd1 | cmd2 [...| camdn]
    [root@locadhost ~]# grep "bash$" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    Teacher:/home/teacher:/bin/bash
    [root@localhost ~]# grep“bash$”letc/passwd I awk -F: '{print $1,$7}'
    root /bin/bash
    teacher /bin/bash

Shell變量的作用、類型

變量的作用

  • 爲靈活管理Linux系統提供特定參數,有兩層意思

    • 變量名:使用固定的名稱,由系統預設或用戶定義

    • 變量值:能夠根據用戶設置、系統環境的變化而變化

      變量的類型

  • 自定義變量:由用戶自己定義、修改和使用
  • 環境變量:由系統維護,用於設置工作環境
  • 位置變量:通過命令行給腳本程序傳遞參數
  • 預定義變量:Bash中內置的一類變量,不能直接修改

    自定義變量

  • 變量名以字母或下劃線開頭,區分大小寫,建議全大寫
    變量名=變量值

    查看變量的值

    echo $變量名
    [root@locadhost ~]# Rroduct=Python
    Version=2.7.13
    [root@locadhost ~]# ehco $Product
    Python
    [root@locadhost ~]# ehco $Product $Version
    Python 2.7.13

    賦值時使用引號

  • 雙引號:允許通過$符號引用其他變量值
  • 單引號:禁止引用其他變量值,$視爲普通字符
  • 反撇號:命令替換,提取命令執行後的輸出結果

    從鍵盤輸入內容爲變量賦值

    resd [-p "提示信息"] 變量名

    面向對象:將建好的對象直接調用過來使用
    面向過程:每個過程都要自己輸入

設置變量的作用範圍

格式1:export 變量名 ...
格式2:export 變量名=變量值 ...
  • 兩種格式可以混合使用
    [root@locadhost ~]# echo "$Producvt $Version"
    Benet 6.0
    [root@locadhost ~]# export Product Version
    [root@locadhost ~]# bash
    [root@locadhost ~]# echo "$Product $Version"
    Benet 6.0

    整數變量的運算

    expr 變量1 運算符 變量2  [運算符 變量3]...

    常用運算符

  • 加法運算:+
  • 減法運算:-
  • 乘法運算:\*
  • 除法運算:/
  • 求模(取餘)運算:%

特殊的Shell變量

環境變量

  • 由系統提前創建,用來設置用戶的工作環境
  • 配置文件: /etc/profile~/.bash_ profile

常見的環境變量

  • PWD、PATH
  • USER、SHELL、 HOME
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin
[root@localhost ~]# PATH="$PATH:/root"
[root@localhost ~]# echo $PATH
 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin:/root

位置變量

  • 表示爲$n, n爲1~9之間的數字
[root@localhost ~]# ./myprog.sh one two three four five six //$1,第1個位置參數,$2,第2個位置參數

+代表後面有格式要求

預定義變量

  • $#;命令行中位置變量的個數
  • $*:所有位置變量的內容
  • $?:. 上一條命令執行後返回的狀態,當返回狀態值爲0時表示執行正常,非0值表示執行異常或出錯
  • $0:當前執行的進程/程序名
[root@localhost ~]# vim mybak.sh
#!/bin/bash
TARFILE=beifen-'date +%s .tgz
tar zcf $TARFILE $* &> /dev/null
echo "已執行$0腳本,“
echo“共完成$#個對象的備份”
echo”具體內容包括: $*”
[root@localhost ~]# chmod +x mybak.sh
[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow
已執行./mybak.sh腳本,
共完成2個對象的備份
具體包括:/etc/passwd /etc/shadow
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章