bash特性及bash腳本編程初步

終端,附著在終端的接口程序:

GUI:KDE, GNome, Xfce

CLI:/etc/shells

bash

zsh

fish

 

bash的特性:

命令行展開:~, {}

命令別名:alias, unalias

命令歷史:history

文件名通配:glob

快捷鍵:Ctrl+a, e, u, k, l

命令補全:$PATH

路徑補全:

 

bash特性之:命令hash

緩存此前命令的查找結果:key-value

key:搜索鍵

value:值

 

hash命令:

hash:列出

hash -d COMMAND:刪除

hash -r:清空

 

bash的特性之:變量

程序:指令+數據

指令:由程序文件提供;

數據:IO設備、文件、管道、變量

 

程序:算法+數據結構

 

變量名+指向的內存空間

 

變量賦值:name=value

變量類型:存儲格式、表示數據范圍、參與的運算

編程語言:

強類型變量

弱類型變量:

bash把所有變量統統視作字符型;

bash中的變量無需事先聲明;相當于,把聲明和賦值過程同時實現;

聲明:類型,變量名

變量替換:把變量名出現的位置替換為其所指向的內存空間中數據;

變量引用:${var_name}, $var_name

變量名:變量名只能包含數字、字母和下劃線,而且不能以數字開頭;

變量名:見名知義,命名機制遵循某種法則;不能夠使用程序的保留字,例如if, else, then, while等等;

bash變量類型:

本地變量:作用域僅為當前shell進程;

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

局部變量:作用域僅為某代碼片斷(函數上下文);

 

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

特殊變量:shell內置的有特殊功用的變量;

$?:

0:成功

1-255:失敗

 

本地變量:

變量賦值:name=value

變量引用:${name}, $name

"":變量名會替換為其值;

'':變量名不會替換為其值;

查看變量:set

撤銷變量:unset name

注意:此處非變量引用;

 

環境變量:

變量賦值:

(1) export name=value

(2) name=value

    export name

(3) declare -x name=value

(4) name=value

declare -x name

變量引用:${name}, $name

 

注意:bash內嵌了許多環境變量(通常為全大寫字符),用于定義bash的工作環境

PATH, HISTFILE, HISTSIZE, HISTFILESIZE, HISTCONTROL, SHELL, HOME, UID, PWD, OLDPWD

 

查看環境變量:export, declare -x, printenv, env

撤銷環境變量:unset name

 

只讀變量:

(1) declare -r name

(2) readonly name

 

只讀變量無法重新賦值,并且不支持撤銷;存活時間為當前shell進程的生命周期,隨shell進程終止而終止;

 

bash特性之多命令執行:

~]# COMMAND1; COMMAND2; COMMAND3; …

 

邏輯運算:

運算數:真(true, 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

 

短路法則:

~]# COMMAND1 && COMMAND2

COMMAND1為“假”,則COMMAND2不會再執行;

否則,COMMAND1為“真”,則COMMAND2必須執行;

 

~]# COMMAND1 || COMMAND2

COMMAND1為“真”,則COMMAND2不會再執行;

否則,COMMAND1為“假”,則COMMAND2必須執行;

 

示例:~]# id $username || useradd $username

 

shell腳本編程:

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

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

解釋運行:源代碼 –> 運行時啟動解釋器,由解釋器邊解釋邊運行;

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

shell腳本編程:

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

完整編程:

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

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

程序=指令+數據

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

順序執行

選擇執行

循環執行

代表:C,bash

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

(class):實例化對象,method;

代表:Java, C++, Python

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

如何寫shell腳本:

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

常見的解釋器:

#!/bin/bash

#!/usr/bin/python

#!/usr/bin/perl

文本編程器:nano

行編輯器:sed

全屏幕編程器:nano, vi, vim

shell腳本是什么?

命令的堆積;

但很多命令不具有冪等性,需要用程序邏輯來判斷運行條件是否滿足,以避免其運行中發生錯誤;

運行腳本:

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

chmod +x /PATH/TO/SCRIPT_FILE

/PATH/TO/SCRIPT_FILE

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

bash /PATH/TO/SCRIPT_FILE

注意:腳本中的空白行會被解釋器忽略;

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

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

bash的配置文件:

兩類:

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

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

登錄類型:

交互式登錄shell進程:

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

使用su命令:su – USERNAME, 或者使用 su -l USERNAME執行的登錄切換;

非交互式登錄shell進程:

su USERNAME執行的登錄切換;

圖形界面下打開的終端;

運行腳本

profile類:

全局:對所有用戶都生效;

/etc/profile

/etc/profile.d/*.sh

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

~/.bash_profile

功用:

1、用于定義環境變量;

2、運行命令或腳本;

bashrc類:

全局:

/etc/bashrc

用戶個人:

~/.bashrc

功用:

1、定義本地變量;

2、定義命令別名;

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

交互式登錄shell進程:

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

非交互式登錄shell進程:

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

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

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

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

(1) 通過命令行重復定義一次;

(2) 讓shell進程重讀配置文件;

~]# source /PATH/FROM/CONF_FILE

~]# .  /PATH/FROM/CONF_FILE

原創文章,作者:N24_小顏,如若轉載,請注明出處:http://www.www58058.com/60292

(0)
N24_小顏N24_小顏
上一篇 2016-11-21
下一篇 2016-11-21

相關推薦

  • 馬哥教育網絡班21期第6周作業

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#; %s/^[[:space:]]\+/#& 2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符; %s/^[[:space:]]\+/ …

    Linux干貨 2016-12-05
  • MYSQL數據庫基礎教程

    一、數據庫介紹 1.數據庫管理系統的產生背景 (1)數據時代的到來要求對數據進行有效和安全的管理 涉及的數據量大 數據不隨程序的結束而消失 數據被多個應用程序共享 大數據時代的到來 (2)傳統文件系統管理上的缺陷要求改變數據管理方式 編寫應用程序不方便 數據冗余不可避免 應用程序依賴性 不支持對文件的并發訪問 數據間聯系弱 難以按用戶視圖表示數據 無安全控制…

    Linux干貨 2017-10-05
  • 文件管理相關

     rename:對文件重命名     rename [options] expression replacement file        示例:          # rename -v cut.exe cut.exe3 cut.exe…

    Linux干貨 2017-02-25
  • 網絡23期心得

    1、描述計算機的組成及其功能 計算機系統是由五大部分組成:運算器、控制器、存儲器、輸入設備、輸出設備   運算器(Datapath):運算器的功能是對數據進行各種算術去處和邏輯運算,即對數據進行加工處理。   控制器(Control):控制器是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、…

    Linux干貨 2016-09-19
  • 【原創】RHEL7-PPTP-VPN-Server排錯

    第一次寫博客,明顯不知道如何下筆。     昨天6月21日,突然發現往日運行一切正常的pptpvpn服務器怎么也連不上了,錯誤代碼是619。這個錯誤代碼以前并沒有見過,于是上google查了一下資料,據說有幾種可能: 1,路由器或防火墻干掉了tcp1723; 2,電腦協議棧問題; 3,撥號連接的認證選項有問題; &nb…

    Linux干貨 2016-06-23
  • AWK——文本處理三劍客

    GNU awk ·文本處理三工具:grep,sed,awk          grep,egrep,fgrep:文本過濾工具:pattern          sed:行編輯器  &nbsp…

    Linux干貨 2016-09-20
欧美性久久久久