Shell 基礎知識

Shell 基礎知識

1.簡介

在計算機科學中,Shell俗稱殼(用來區別於核),是指“爲使用者提供操作界面”的軟件(命令解析器)。它接收用戶命令,然後調用相應的應用程序。(百度百科)


kernel主要的四種功能

內存管理

軟件程序管理

硬件管理

文件系統

image.png


知識點小節:

#!/bin/bash       腳本文件的第一行是個特例

# 註釋行,不執行


執行:sh

        顯示腳本debug:    sh -x    vim/set -x 重複debug模式

        不執行只檢測語法: sh -n

      bash

      ./


~~~~~~~~~~~~~~~

註釋信息

#!/bin/bash

# Description:

# Date: 2016-9-26 16:50:10

# Email: [email protected]

# Author: Mag

# Version: 0.01

~~~~~~~~~~~~~~~


腳本加密工具shc

shc -r -f filename


2.Shell環境變量

變量類型:

字符型

數值型:


bash中的變量的種類:【根據變量的生效範圍等標準】

本地變量:生效範圍爲當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效;【也包括當前shell的父shell】

環境變量:生效範圍爲當前shell進程及其子進程;

局部變量:生效範圍爲當前shell進程中某代碼片斷(通常指函數);

位置變量:$1, $2, ...來表示,用於讓腳本在腳本代碼中調用通過命令行傳遞給它的參數;

特殊變量:$?, $0, $*, $@, $#

###

本地變量:

變量賦值:name='value'

(1) 可以是直接字串; name="username"

(2) 變量引用:name="$username"

(3) 命令引用:name=`COMMAND`, name=$(COMMAND)   

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

"":弱引用,其中的變量引用會被替換爲變量值;

'':強引用,其中的變量引用不會被替換爲變量值,而保持原字符串;

顯示已定義的所有變量:  

set

銷燬變量:

unset name


環境變量:

變量聲明、賦值:

export name=VALUE

declare -x name=VALUE

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

顯示所有環境變量:

export

env

printenv

銷燬變量:

unset name


bash有許多內建的環境變量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1


只讀變量:

readonly name

declare -r name


位置變量:

在腳本代碼中調用通過命令行傳遞給腳本的參數;

$1, $2, ...:對應調用第1、第2等參數;

shift [n]


特殊變量:

                $0:   腳本名稱自身

                $?:   上一條命令的執行狀態

                      狀態用數字來表示:0-255;

                        0:     成功

                        1-255: 失敗

                $!:   執行上一個後臺命令的PID

                $#:   這個程序的參數個數(傳給腳本的參數個數)

                $*:   這個程序的所有參數(傳遞給腳本的所有參數,視爲一個整體,是以一個單字符串顯示所有向腳本傳遞的參數,與位置變量不同,參數可超過9個)

                $$:   這個程序的PID(腳本運行的當前進程ID號)

                $@:   傳給腳本的所有參數的列表,每一個參數當作獨立的一個字符串


變量的命名要求:

1、不能使程序中的保留字[關鍵字]:例如if, for

          2、只能使用數字、字母和下劃線組成,且不能以數字開頭

          3、見名知義




3.bash的配置文件


     profile類:爲交互式登錄的用戶提供配置

                /etc/profile:              全局

                /etc/profile.d/*.sh:       全局

                ~/.bash_profile:           個人配置,僅對當前用戶有效


           功能:

                設定環境變量

                運行命令或腳本


     bashrc類:非交互式登錄用戶提供配置

              /etc/bashrc:  全局

              ~/.bashrc:    個人配置

            

           功能:

                設定本地變量

                定義命令別名


    通知shell重讀配置文件的命令:

         source(.)

         . FILE

    重新登錄


交互式登錄用戶:

          /etc/profile --> /etc/profile.d/*.sh  -->~/.bash_profile -->~/.bashrc --> /etc/bashrc

非交互式登錄用戶:

          ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh



4.語法

bash中條件判斷使用if

      單分支:

             if    條件; then

                     分支1;

             fi

###示例

            if [ -f /tmp/aaa ]

                then 

                    echo "yes"

            else

                    echo "no"

            fi


      雙分支:

             if    條件;then

                     分支1;

             else 

                     分支2;

             fi


       多分支:

             if    條件1; then

                     分支1;

             elif  條件2;then

                     分支2

             elif  條件3;then

                     分支3

             ...

             else

                    分支n;

             fi

###示例

            if [ $NUM1 -gt $NUM2 ]

                then 

                    echo "$NUM1 > $NUM2"

            elif [ $NUM1 -lt $NUM2 ]

                then   

                    echo "$NUM1 < $NUM2"

               

            else 

                    echo "$NUM1 = $NUM2"

              

            fi


運算語法:

            #let var=$s+$i

            #var=$(expr $s + $i)

            #var=`expr $s + $i`

            #var=$[$s+$i]

            #var=$(($s+$i))



條件測試方法:

         bash: 每個命令,執行狀態返回值:

                                                             成功: 0

                                                             失敗: 非0


          [[ 測試表達式 ]]       腳本關鍵字   bash關鍵字

          [ 測試表達式 ]         內生命令     bash命令

          test 測試表達式

###示例

            test 1 -gt 2; echo $?  #是否大於2

            test 1 -lt 2; echo $?  #是否小於2

            test 1 -ge 2; echo $?  #是否大於等於2

            test 1 -le 2; echo $?  #是否小於等於2

            test 1 -eq 2; echo $?  #是否等2

            test 1 -ne 2; echo $?  #是否不等於2


組合條件測試: 對條件做邏輯運算

          與: 條件1 && 條件2

               條件1爲假,則最終結果一定爲假,因此,條件2將不執行

               條件1爲真,則最終結果決於後面的條件,因此,條件2必須執行 

          或: 條件1   ||   條件2   

               條件1爲真,則最終結果一定爲真,因此,條件2將不再執行

               條件1爲假,則最終結果決於後面的條件,因此,條件2必須執行 

          非: !條件


整數測試:

         -eq , -ne , -le  , -ge, -gt , -lt


字符測試:

         雙目:

                 >:    大於

                 <:    小於

                ==:    等於,等值比較, 一個”=“ 是做賦值的 【= 其實一個等於號也可以,只要放在測試命令中】

                =~:    左則是字符串,右則是一個模式,判定左側的字符串能否被右側的模式所匹配,通常只在[[ ]]使用,模式中可以使用行首、行尾錨定符:但模式不要加引號

             !=,<>:    不等於


文件測試:

存在性測試

-a FILE

-e FILE: 文件存在性測試,存在爲真,否則爲假;

存在性及類別測試

-b FILE:是否存在且爲塊設備文件;

-c FILE:是否存在且爲字符設備文件;

-d FILE:是否存在且爲目錄文件;

-f FILE:是否存在且爲普通文件;

-h FILE 或 -L FILE:存在且爲符號鏈接文件;

-p FILE:是否存在且爲命名管道文件;

-S FILE:是否存在且爲套接字文件;

文件權限測試:

-r FILE:是否存在且可讀

-w FILE: 是否存在且可寫

-x FILE: 是否存在且可執行

文件特殊權限測試:

-g FILE:是否存在且擁有sgid權限;

-u FILE:是否存在且擁有suid權限;

-k FILE:是否存在且擁有sticky權限;

文件大小測試:

-s FILE: 是否存且非空;

文件是否打開:

-t fd: fd表示文件描述符是否已經打開且與某終端相關



-N FILE:文件自動上一次被讀取之後是否被修改過;

-O FILE:當前有效用戶是否爲文件屬主;

-G FILE:當前有效用戶是否爲文件屬組;


雙目測試:

FILE1 -ef FILE2: FILE1與FILE2是否指向同一個設備上的相同inode


FILE1 -nt FILE2: FILE1是否新於FILE2;

FILE1 -ot FILE2: FILE1是否舊於FILE2;


shell腳本學習方法

腳本學習之道.jpeg



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章