筆記–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 09:01
下一篇 2016-08-12 09:01

相關推薦

  • LAMP及nfs、samba的綜合練習

    練習一: 配置第一臺主機:服務端共享目錄: [root@localhost /]# yum install nfs-utils [root@localhost /]# systemctl start rpcbind [root@localhost /]# sy…

    Linux干貨 2016-10-24
  • 網絡N23期第四周grep

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost ~]# cp -R /etc/skel /home/tuser1 && chmod g-r,o-r /home/tuser1 [root@localhost ~]# ls -l…

    系統運維 2016-12-05
  • Linux入門之文本處理三劍客之grep

    Linux入門之文本處理三劍客之grep  文本處理工具:  grep,sed(流編輯器),awk    grep簡述及特點 簡介:全局搜索正則表達式出來的行并打印 (Global search REgular expression and Print out  the line),一種按照特定模式(patt…

    Linux干貨 2016-08-07
  • 淺談Android應用HTTP框架選型

    我們知道,Android應用主要是通過客戶端-服務器的方式進行數據交互,一般在APP開發時可能是一個接口對應一個顯示模塊,這樣的設計會讓客戶端更新時很麻煩。為了解決這個問題,通常的做法是和服務端之間定義協議,設計顯示模式,進而達到實時更新UI界面的目的,增加或刪除顯示模塊時不需要讓用戶手動更新apk,這種方法最常見的就是在做活動或者廣告的時候用到。以我們的優…

    2016-06-22
  • 馬哥教育網絡班21期-第4周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。     cp -R /etc/skel /home/tuser1     chmod g-rwx,o-r…

    Linux干貨 2016-08-03
  • 面授20-1班 0805課間練習與課后作業

    課間練習 第一階段 新學的命令文本命令cat tac rev more less head tail cut paste wc sort dif patch 1 、找出ifconfig 命令結果中本機的所有IPv4 地址 [root@IP70-CentOS7 ~]# >>ifconfig | tr&nbsp…

    Linux干貨 2016-08-07

評論列表(1條)

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

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

欧美性久久久久