筆記–8.8 shell腳本編程

shell編程注意事項

 1,指令的執行是從上而下,從左而右的分析與執行

 2,指令的下達時:指令,選項與參數之間的多個空白都會被忽略掉

 3,空白行會被忽略掉,并且tab鍵所推開的空白同樣視為空格鍵

 4. 如果一行的內容太多,則可以使用『 \[Enter] 』來延伸至下一行

 5,『 # 』可做為批注,任何加在 # 后面的資料將全部被視為批注文字而被忽略

  

如果程序文件名是 /home/dmtsai/shell.sh 好了可以有底下幾個執行方法:

? 1,直接指令下達: shell.sh 文件必須要具備可讀與可執行 (rx) 的權限,然后:

        o 絕對路徑:使用 /home/dmtsai/shell.sh 來下達指令;

        o 相對路徑:假設工作目錄在 /home/dmtsai/ ,則使用 ./shell.sh 來執行

        o 變量『PATH』功能:將 shell.sh 放在 PATH 指定的目錄內,例如: ~/bin/

? 2,以 bash 程序來執行:透過『 bash shell.sh 』或『 sh shell.sh 』來執行

shell腳本編程

編程語言的分類:根據運行方式

編譯運行:源代碼–》編譯器(編譯)–》程序文件

解釋運行:源代碼–》運行時啟動解釋器,由解釋器邊解釋邊運行,速度更快

根據其編程過程中功能的實現是調用庫還是調用外部的程序文件

shell腳本編程

利用系統上的命令及編程組建進行編程

完整編程:

利用庫或編程組件進行編程

編程模式:過程式編程語言,面向對象的編程語言

程序=指令+數據

過程式:以指令為中心來組織代碼,數據是服務于代碼

  順序執行

  選擇執行

  循環執行

  代表:C,bash

對象式:以數據為中心來組織代碼,圍繞數據來組織指令

  類(class):可被實例化對象,操作 組成

  代表:Java,C++,Python

 

  shell腳本編程:過程式編程,解釋運行,依賴于外部程序文件運行

  如何寫shell腳本

  腳本的第一行,頂格:給出shebang解釋器路徑,用于指明解釋執行當前腳本的解釋器程序文件

  常見的解釋器:

  #!/bin/bash

  #!/use/bin/python

  #!/usr/bin/perl

  文本編輯器:nano

  行編輯器:sed

  全屏幕編程器:nano vim

shell腳本是什么?

命令的堆積:    

但很多命令不具有冪等性,需要用程序邏輯來判斷運行條件是否滿足,以避免其運行中發生錯誤,并不是所有錯誤都會影響腳本的運行 

運行腳本

1,賦予執行權限,并直接運行此程序文件

 chmod +x /PATH/TO/SCRIPT_FILE

2,直接運行解釋器,將腳本以命令參數傳遞給解釋器程序

 bash /PATH/TO/SCRIPT_FILE

注意:腳本中的空白行會被解釋器忽略,不會顯示空白行,如果想顯示,就在該行輸入echo就可以了

 腳本中,除了shebang,余下所有以#開頭的行,都會被視作注釋行而被忽略,不會顯示出來,此即為注釋行

 shell腳本的運行時通過運行一個子shell進程實現的

練習:寫一個腳本,實現如下功能

    1,顯示/etc目錄下所有以大寫P或小寫p開頭的文件或目錄本身

    2,顯示/var目錄下的所有文件或目錄本身,并將顯示結果中的小寫字母轉換為大寫后顯示

    3,創建臨時文件/tmp/myfile.XXXX

   

    #!/bin/bash

  ls -d /etc/[pP]*

ls -d /var/* |tr 'a-z'  'A-Z'

mktemp /tmp/myfile.XXXX

bash的配置文件:

兩類

profile類:為交互式登陸的shell提供配置

bashrc類:為非交互式登錄的shell進程提供配置

登陸類型

交互式登錄的shell進程

直接通過某終端輸入賬號和密碼后登陸打開的shell進程

使用su命令:su -USERNAME或使用  su-L USERNAME執行的登陸切換

非交互式登錄shell進程

su USERNAME執行的登陸切切換

圖形界面下打開的終端

運行腳本(bash運行腳本,腳本中包含shell,就是子shell)

profile類

全局:對所有用戶都生效

/etc/profile

/etc/profild.d/*.sh

用戶個人:僅對當前用戶有效

~/.bash_profile

功用;

1,用于定義環境變量

2,運行命令或腳本

bashrc類

全局:

/etc/bashrc

用戶個人

~/.bashrc

功用:

1,定義本地變量

2,定義命令別名

注意:僅管理員可修改全局配置文件

配置文件的讀取次序

交互式登錄shell進程(登錄系統)

/etc/profile–>/etc/profile.d/* –> ~/.bash_profile –> ~/.bashrc –> /etc/bashrc

非交互式登錄shell進程(腳本)

~/.bashcr –> /etc/bashrc –> /etc/profile/d/*

命令行中定義的特性,例如變量和別名作用域為當前shell進程的生命周期

配置文件定義的特性,只對隨后新啟動的shell進程有效

讓通過配置文件定義的特性立即生效

1,通過命令行重復定義一次

2,讓shell進程重讀配置文件(在.bashrc新定義的alias不會立即生效,采用下面兩種方法)

 ~]# source /PATH/FROM/CONF_FILE

 ~]# ./PATH/FROM.CONF_FILE

原創文章,作者:wutianyou,如若轉載,請注明出處:http://www.www58058.com/31749

(0)
wutianyouwutianyou
上一篇 2016-08-12
下一篇 2016-08-12

相關推薦

  • DNS

    簡介     DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。DNS協議運行在UDP協議之上,使用端口號5…

    Linux干貨 2016-11-15
  • 正則表達式和變量寫腳本

    #!/bin/bash 檢查系統所有用戶的shell是否為bash? 注釋:用grep查找是否有此類用戶,如果有則為真,則$?必然為0;顯示的passwd結果對我們沒意義,所以重定向到空。  grep “\bbash\b$” /etc/passwd &> /dev/null  A=`echo $?` …

    Linux干貨 2017-04-16
  • Linux磁盤管理實操

    Linux磁盤管理實操 1、創建一個10G分區,并格式為ext4文件系統。 先使用fdisk工具創建一個10G的新分區。使用fdisk打開要創建磁盤分區的物理設備fdisk /dev/sdb,然后使用n指令創建新的分區,分區類型選此處選擇為主分區,第一個柱面使用默認的1,最后的柱面,使用+10G這種表示方式,表示創建的分區大小為10G。 創建后可以使用p指令…

    系統運維 2016-12-13
  • 初識linux文件管理

    初識linux文件管理 1.文件系統與目錄結構 文件系統從根目錄 下開始,用“/”。 以. 開頭的文件為隱藏文件,路徑分隔用/表示。文件系統的層級結構是LSB(linux standard base),遵循文件系統層級標準(FHS ) 文件命名規則:   文件名最長255個字節,包括路徑名在內共4095個字節  &nb…

    2017-02-18
  • Linux系統啟動過程中grub故障與修復(一)

    GRUB 是引導裝入器 — 它負責裝入內核并引導 Linux 系統。GRUB 可以引導多種操作系統,如Linux、 DOS、 Windows 。 GRUB共分為三個階段:stage1主要負責BIOS和GRUB之間的交接,載入存放于各個分區中的開機文件;stage1.5是連接stage1和stage2之間的通道,起著過渡的作用,負責識別stage2所在/bo…

    2017-09-03
  • linux文本編輯利器-vim

    概述 Vim是從vi發展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用,和Emacs并列成為類Unix系統用戶最喜歡的文本編輯器。Vim強大的編輯能力中很大部分是來自于其普通模式命令。vim的設計理念是命令的組合。例如普通模式命令"dd"刪除當前行,"dj"代表刪除到下一行…

    Linux干貨 2016-08-11

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-12 14:50

    對腳本基礎總結的較為詳細,但是腳本更應該注重實戰,而不是停留在理論哦,只有多看,多謝,才能寫出優秀的腳本哦,

欧美性久久久久