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
下一篇 2016-12-20

相關推薦

  • Linux第一周學習心得

                           LINUX入門學習心得 Shell基本命令 ### shell可執行命令分類 ### 內部命令:由shell自帶得,而且通過某命令形式提供 help 內部命令列表 enble cmd 啟用內部命…

    Linux干貨 2017-07-15
  • N26 第五周博客作業

    1、顯示當前系統上root、fedora或user1用戶的默認shell; 演示:     [root@263821a05cd9 /]# grep -E “^(root|fedora|user1)\>” /etc/passwd    root:x:0:0:root:/r…

    Linux干貨 2017-03-05
  • 馬哥教育21期網絡班—第五周課程+練習

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; grep "^[[:space:]]\+" /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; grep "…

    Linux干貨 2016-07-29
  • vim編譯器與shell腳本簡介

    一、vim文本編譯器       vi:Visual Interface,文本編輯器;   文本: ASCII Unicode  文本編輯種類:行編輯器:sed  ;全屏編輯器:nano,vi ,vim ;其他編輯器:gedit(圖形),g…

    Linux干貨 2016-11-24
  • 腳本之循環的特殊用法及函數的使用

    一、本文主要時針對while for select循環結果的特殊用法進行講解。     1、while循環的特殊用法                 while read…

    Linux干貨 2016-08-21
  • LVS介紹及工作原理圖解

    一、LVS簡介 LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器,是一個由章文嵩博士發起的自由軟件項目,官方站點是:http://www.linuxvirtualserver.org?,F在LVS已經是Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須重新編譯內核以支持LVS功能模塊,但是從Linux2.…

    2017-12-06
欧美性久久久久