bash特性及bash腳本編程初步

bash特性之命令hash

之前我們講過用戶在執行一個命令的時候bash會遍歷環境變量$PATH中所有路徑來查找執行文件。而命令hash是用來緩存之前用戶使用過的命令下次執行的時候直接搜索hash緩存來減少對$PATH變量中路徑的遍歷次數,從而提高系統運行效率

hash:hash命令
    hash:列出
    -d COMMAND:刪除
    -r:清空

bash特性之變量

變量簡單的來說就是讓某一個特定的字符串來代表不固定的內容,以一個簡單的字眼來代替一個復雜或者容易變動的數據

例如:y=x+z 那么這里y就是變量,x+z就是變量的值

變量賦值:name=VALUE

變量的設置和規則

1.變量與變量內容以=相鏈接.

2等號兩邊不能直接鏈接空格。

3.變量名稱只能是英文字母與數字,但是不能以數字開頭頁不能使用橫須的保留字段,例如if,else,then,while等

4.“”里面的變量名會被替換成變量值,''里面變量名則不會被替換成變量值

5.可以使用轉義符\來講特殊符號(如[enter],$,\,空格符….等)編程一般字符

6.命令的引用可以使用反單引號`命令`或者$(命令)來引用

7.通常系統變量使用大寫字母表示.自行設置的變量用小寫字母以方便判斷

8.查看變量:set

9.撤銷變量:unset NAME

bash變量的類型

1.本地變量:其作用域僅為當前shell

2.環境變量:作用域為當前shell及其子進程

環境變量可以幫我們達到很多功能,包括主文件夾的變換,執行文件的路徑,提示符的顯示等等。常見的有HOME,SHELL,HISYSIZE,MALL,UIS,PWD,PATH,LANG…..

3.局部變量:作用域僅為某部分代碼片段

4.位置參數變量:當執行腳本的shell進程傳遞的參數

5.特殊變量:shell內置的有特殊功用的變量;如:$?

bash的環境配置文件

當我們進入bash的時候就會有一堆有用的變量,這些變量都是由環境變量的配置文件提供的,bash在啟動時就會依次讀取到這些文件。這些配置文件按功能分為兩類

profile類:

作用范圍:對全局所有的用戶有效

/etc/profile;/etc/profile.d/*.sh

對用戶個人有效

~/.bahs_profile

功能:1.定義環境變量;2.運行腳本命令

bashrc類:

作用范圍:全局所有用戶:

/etc/bashrc

個人用戶:

~/.bashrc

功用:定義本地變量;定義命令別名

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

bash特性之多命令執行

在某些時候我們希望可以一次性執行多個命令的話可以在命令中間加;隔開,那么bash會在運行完一個命令之后繼續運行下一個命令

COMAND1;COMAND2;COMAND3;……

邏輯運算

第一種方式:布爾運算:

運算數:真;(表示為yrue,yes,on,1)

假;(false,no,off,0)

與運算:條件全部為真結果則為真,否則為假;用&&表示

真&&真=真 ;1&&1=1

真&&假=假 ;1&&0=0

假&&真=假 ;0&&1=0

假&&假=假 :0&&0=0

或運算:條件全部為假結果才為假,否則都為真;用 || 表示

真||真=真 ; 1||1=1

真||假=真 ; 1||0=1

假||真=真 ; 0||1=1

假||假=假 ; 0||0=0

非運算:!表示

!1=0 非真=假

!0=1 非假=真

第二種方式:

EXRPESSINO1 -a EXRPESSINO2 EXRPESSINO1 -o EXRPESSINO2

!EXRPESSINO

短路法則:

COMAND1 && COMAND2

COMAND1為假,則COMAND2不會再執行;其結果一定為假;否則COMAND1為真,則COMAND2必須執行

COMAND1 || COMAND2

COMAND1為真,則COMAND 不會再執行;其結果一定為真;否則COMAND1為假,則COMAND2必須執行 實例:id $username || useradd $usernam

用戶是否存在 存在為真,不存在未假,即存在則不執行,不存在就必須執行

shell腳本編程

shell腳本是利用shell的功能所寫的一個“程序”這個程序是純文本文件,將一些shell命令與shell語法想結合,搭配正則表達式,管道命令,IO重定向等功能來達到我們想要處理的目的

shell腳本與其他的編程語言根據其運行方式可以分為兩類

編譯式:是有源代碼經過編譯器編譯成程序文件,JAVA等為編譯式

解釋型:源代碼是由解釋器一遍解釋一遍執行,shell屬于解釋型

以編程模型來分類:

過程式編程語言:是以指令為中心來組織代碼,數據是服務于代碼的,代表為C,bash

面向對象式編程語言:以數據為中心來組織代碼,圍繞數據來組織指令,代表c++,python

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

如何寫shell腳本

腳本文件的第一行,定格給出解釋器路徑,用來指明解釋執行當前腳本的解釋器程序文件比較常見的解釋器有:

#!/bin/bash

#!/usr/bin/python

#!/usr/bin/perl

我們這里會使用到文本編輯器nano,nano是一個比較簡單的全屏文本編輯器,使用namo NAME 就可以打開一個文件

運行腳本

兩種方式:1.賦予執行權限,并直接運行此程序文件;2.直接運行解釋器,并將腳本以命令行參數傳遞給解釋器

shell腳本是運行在shell的子進程中

注意:腳本中除了頂格的#之外,余下的所有已#開頭的都會被視作注釋信息而忽略

練習1:寫一個腳本,實現如下功能; (1) 顯示/etc目錄下所有以大寫p或小寫p開頭的文件或目錄本身; #!/bin/bash

ls -dl /etc/[pP]*

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

ls -a | tr [a-z] [A-Z]

(3) 創建臨時文件/tmp/myfile.XXXX;

#/bin/bash

mktenp /tmp/myfule.xxxxx

原創文章,作者:N24-執念,如若轉載,請注明出處:http://www.www58058.com/64252

(0)
N24-執念N24-執念
上一篇 2016-12-19 23:54
下一篇 2016-12-20 12:01

相關推薦

  • Linux系統啟動流程

    對于linux系統的初學者來說,理解并掌握linux系統啟動流程能夠使你夠深入的理解linux系統,還可以通過系統的啟動過程來分析問題解決問題。   Linux系統的啟動流程   關于linux系統的啟動流程可以分為以下步驟:     POST(加電自檢)–>加載BIOS(Basic Inp…

    Linux干貨 2015-05-18
  • 概述Windows2003的卷影副本

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/157940      卷影副本,也就是Volume Shadow Server簡單來講,卷影副本(或稱為VSS)可以簡單…

    Linux干貨 2015-03-25
  • CentOS 7 tomcat 7.0.54 的功能實現及詳解

    一、 jdk 安裝配置 # yum install java-1.8.0-openjdk-devel (依賴的java-1.8.0-openjdk,java-1.8.0-openjdk,headless也會被安裝 ) # alternatives -h # vim /e…

    Linux干貨 2014-06-09
  • 26期全程班-第七周博客作業

    1、創建一個10G分區,并格式為ext4文件系統;    (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl;    (2) 掛載至/data/mydata目錄,要求掛載時禁止程序自動運行,且不更新文件的訪問時間戳; # fdisk /dev/sda # mkf…

    Linux干貨 2017-03-17
  • KVM部署及簡單使用

    KVM特點 KVM必須在具備Intel VT或AMD-V功能的x86平臺上運行。KVM包含一個為處理器提供底層虛擬化,可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。使用一個經過修改的QEMU(qemu-kvm),作為虛擬機上層控制和界面。 由于KVM僅是一個簡單的虛擬化模塊,所以它的內存管理沒有自我實現,需借助于Linux內…

    Linux干貨 2016-02-14
  • RAID簡述和Linux軟RAID配置

    RAID簡述和Linux軟RAID配置 PS:僅為課程練習,原理和配置可能有誤,僅供參考,謝謝; 1.RAID功能簡述     RAID,全稱(Redundant Arrays of Inexpensive Disk或Redundant Arrays of Independent Disk),現在一般多用于后面那個稱呼,獨立磁盤冗余陣列。RAID的基礎概念大…

    Linux干貨 2016-07-17
欧美性久久久久