Linux bash 特性、相關變量以及編程

Linux bash 特性、相關變量以及編程

bash 特性之:命令hash

緩存此前執行過的命令(都是外部命令,不記錄內嵌命令),加速命令的執行

hash 
  -d 清空指定命令記錄
  -r 直接清空hash表

bash 特性之一: 變量 程序=指令+數據 指令是有文件提供 數據是由:IO設備,文件,變量,管道

程序:算法+數據結構

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

編程語言

 bash把所有變量統稱為作為字符型
 bash中變量無需事先聲明;相當于,把聲明和賦值過程同時實現
 變量替換,變量名指定的內存數據空間賦值給另外一個變量
 變量引用:$(var_name),$var_name
 變量命名:字母,數字,下劃線,但是不能以數字開頭,見名之意,且不能用程序的關鍵

 bash變量類型
     本地變量(當前shell),環境變量(當前shell以及子進程),局部變量(當前shell的某個進程的變量),位置參數變量(執行腳本傳遞的參數,特殊變量(shell內置的有特殊功能的變量比如"?"
查看變量:set ,撤銷變量:unset NAME
  環境變量
  1),export name=value
  2),name=value;export name
  3),name=value; declare -x name
  4),declare -x name=value
注意:bash內嵌了許多環境變量,用于定義bash工作環境(基本都是大寫,PATH,HOME,HISTFILE...)
  查看環境變量:env,declare -x,printenv 
  撤銷環境變量:unset name
  只讀變量:declare -r name;或者 readonly name ;生命周期隨shell結束而結束

bash特性之多命令執行

~]# COMMAND1;COMMAND2;COMMAND3;.......
邏輯運算
    與,或,非,異或(相同為0,不同則為1)
    與:短路法則:COMMAND1 && COMMAND2,第一個命令執行狀態是否成功,決定后一個                                          反

shell編程

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

編譯運行:源代碼---> 編譯器(編譯) ---> 程序文件
    C語言,
解釋運行:源代碼--->運行時啟動解釋器,由解釋器邊解釋邊運行

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

shell腳本編程 利用系統上的命令及組件進行編程

完整編程 利用庫或者編程組件進行編程

編程模型:過程式編程語言和面向對象編程語言
 過程式:以指令為中心來組織代碼,數據服務于代碼
     順序執行,選擇執行,循環執行
對象式:以數據為中心來組織代碼,圍繞數據來組織指令
   類(class):實例化對象,method

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

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

        #!/bin/bash
        #!/usr/bin/python
        #!/usr/bin/perl

編輯器:nano,sed, vim,vi

命令的堆積:但是很多命令不具有冪等性,需要用程序邏輯來判斷運行條件是否滿足,以避免其運行過程發生錯誤而終止

  運行腳本:
    運行的過程:是先啟動/bin/bash (#!/bin/bash),才開始執行這個腳本文件內的命令(堆積的命令)
    1),賦予執行權限,并直接運行此腳本程序文件
    2),直接用解釋器運行,將腳本以命令行參數傳遞給解釋器程序;~]# bash 腳本文件
    3)"." 或者 source 
注意:空白行直接被忽略,如果要直接加入echo,注釋用"#",

bash 配置文件 profile類:為交互式登陸的shell進程提供配置 su – username ;終端輸入賬號和密碼登陸的終端 bashrc類:為非交互式登陸shell進程提供配置 su username ;圖形界面下打開終端:運行腳本也是(執行腳本是打開了一個子shell)

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/*
 ~]# source 配置文件 或者 ~]# . 配置文件   #重啟配置文件,讓當前shell生效

原創文章,作者:不忘初衷,如若轉載,請注明出處:http://www.www58058.com/65254

(0)
不忘初衷不忘初衷
上一篇 2016-12-29 17:39
下一篇 2016-12-29 21:46

相關推薦

  • N25_第二周作業

    前言 我們這次使用HAProxy作為負載均衡調度器來實現后端httpd服務的負載均衡和動靜分離,實現將來自用戶的80端口的http請求轉發只后端8080端口的server服務 HAProxy介紹 HAProxy的是一個免費的,非??焖俸涂煽康慕鉀Q方案,提供高可用性,負載均衡和代理對TCP和HTTP的應用程序。它特別適用于非常高流量網站。多年來,它已成為標準的…

    Linux干貨 2016-12-12
  • LVM2 邏輯卷管理工具

    LVM2:  LVM: Logical Volume Manager, Version: 2  dm: device mapper,將一個或多個底層塊設備組織成一個邏輯設備的模塊; /dev/dm-#  /dev/mapper/VG_NAME-LV_NAME /dev/mapper/vol0-root /dev/VG_NAME/…

    Linux干貨 2015-09-19
  • 第四周作業2

    #### 1、 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 首先,利用cp命令將/etc/skel目錄復制為/home/tuser1: “` [root@localhost ~]# cp -r /etc/skel /home/tuser1 “` 隨…

    Linux干貨 2018-03-24
  • N22-第三周課堂練習

    — 1.列出當前系統上所有已經登錄的用戶的用戶名,注意:用一個用戶登錄多次,則只顯示一次即可。     who | awk '{print $1}' | uniq 2.取出最后登錄到當前系統的用戶相關信息。   last | head -n 1 3.取出當前系統上被用戶當作其默認shell的最多的…

    Linux干貨 2016-08-30
  • find命令詳解

    寫在前面,命令總覽: 文件名:-name  -iname   glob     從屬關系: -user  -group  -uid  –gid  -nouser  -nogroup 按類型:-type []  ,f,d,l,b,c…

    Linux干貨 2016-02-14
  • 高級文件系統管理1

    本部分內容主要講述了高級文件系統的管理,包括設定文件系統配額,設定和管理軟RAID設備,配置邏輯卷,設定LVM快照和btrfs文件系統。其中文件系統配額和軟RAID在企業中使用的頻率并不很高,作為熟練即可,而邏輯卷的創建和LVM快照是非常重要的內容,必須精通并完全理解其原理。至于btrfs文件系統是新興的一種技術,作為了解即可。 一、知識整理 1、文件系統配…

    Linux干貨 2016-08-29
欧美性久久久久