bash的基礎特性

bash的基礎特性:

            bashUnix shell的一種,在1987年由布萊恩·福克斯爲了GNU計劃而編寫。1989年發佈第一個正式版本,原先是計劃用在GNU操作系統上,但能運行於大多數類Unix系統的操作系統之上,包括LinuxMac OS X v10.4都將它作爲默認shell。它也被移植到MicrosoftWindows上的CygwinMinGW,或是可以在MS-DOS上使用的DJGPP項目。在Novell NetWareAndriod在上也有移植。1990年後,Chet Ramey成爲了主要的維護者。

            Bourne shell的後繼兼容版本與開放源代碼版本,它的名稱來自Bourne shellsh)的一個雙關語(Bourne again /born again):Bourne-AgainSHell

 

           

            Shell

                        GUI

                                    GNOME

                                    KDE

                                    XFCE

                        CLI

                                    狹義上的shell

                                    cat/etc/shells

                                                /bin/bash

                                                /bin/csh

                                                /bintcsh

 

                        /bin/bash

           

            終端:ternimal          

 

            (1) 命令歷史

                        history

            (2) 命令別名

                        alias/unalias

            (3) 命令補全

            (4) 路徑補全

            (5) 命令行展開

                        ~, {}

 

常用的基礎命令:

            cd命令:change directory

                        cd [/PATH/TO/SOMEWHERE]

                        cd

                        cd ~: 回主目錄

                        cd ~USERNAME:切換指定用戶的家目錄

                        cd -: 回到上一次所在目錄

 

                        相關環境變量:

                                    PWD:

                                    OLDPWD

 

            pwd命令:printing workingdirectory

                        顯示工作目錄

 

            lslist

                        列出指定路徑下的文件或目錄的屬性信息

 

                                    Metadata:屬性數據

                                    data:數據

 

                        ls [OPTION]... [FILE]...

                                    -l: 使用長格式顯示

                                                drwxr-xr-x1 root root    8 Aug 23 08:47 .cache

                                                            d:文件類型

                                                            rwxr-xr-x:權限,mode

                                                            1:文件被硬鏈接的次數

                                                            root:owner,屬主;

                                                            root:group, 屬組

                                                            8size,默認爲字節

                                                            Aug23 08:47 修改時間戳

                                                            .cache:文件名

                                    -d:顯示目錄自身屬性

                                    -h:human-readable

                                    -a:顯示所有文件,包括.開頭的隱藏文件

                                                .:當前目錄

                                                ..:父目錄

                                    -r: reverse,逆序顯示

                                    -R: recusive,遞歸

 

            文本文件查看類的命令:

                        cat, tac命令:

                                    cat[OPTION]... [FILE]...

                                                -n

                                                -e:-vE

                                                            -E:顯示行結束符

                                                            -v:顯示非打印字符

 

            文件內容類型查看命令:

                        file /PATH/TO/SOMEWHERE

 

            回顯命令: echo

                        echo [OPTION]...[ARGS]...

                                    -n: 不進行換行;

                                    -e:讓控制符生效;

                                                \n:new line

                        echo"$VAR_NAME"

 

            命令路徑位置查看工具:

                        whereis, which

 

                        which:

                                    which[options] [--] programname [...]

                                                --skip-alias:禁止列出別名

 

                        whereis COMMAND:

                                    顯示二進制程序、源碼文件以及幫助手冊的路徑;

 

            時間相關的命令:

                        RTCRealTime Clock

                        System Clock:系統時鐘

 

                        date: 系統時間

                        clock, hwclock: 硬件時間

 

                        date

                                    date[OPTION]... [+FORMAT]:時間顯示

                                                FORMAT

                                                            %F

                                                            %D

                                                            %T

                                                            %H

                                                            %M

                                                            %S

                        date[MMDDhhmm[[CC]YY][.ss]]:時間設置

 

            hwclock

                        -s:hctosys, 以硬件時鐘爲準,調整系統時間同硬件;

                        -wsystohc, 以系統時鐘爲準

 

            cal:

                        cal[YEAR]

 

    關機或重啓

            關機:halt, poweroff,init 0, shutdown -h TIME

            重啓:reboot, init 6,shutdown -r TIME

 

            shutdown

                        shutdown[OPTIONS...] [TIME] [WALL...]

                                    -r:重啓

                                    -h:關機

                                    --no-wall

                                    -c

 

                        TIME:

                                    +m:相對時長之後執行相應操作;單位是分鐘;

                                    HH:MM絕對時間

 

    stat

w,who, whoami

 

bash的基礎特性(02)

        (1) glob

                    文本名通配

                                *:匹配任意長度的任意字符;

                                ?:匹配任意單個字符;

                                            a*b:aab, ab, a123b;

                                            a?b:

                                []: 匹配指定範圍內的任意單個字符;

                                            [0-9]

                                [^]:匹配範圍外的任意單個字符;

                                            [^a-b]

 

                                            字符集合:

                                                        [:lower:]

                                                        [:upper:]

                                                        [:alnum:]

                                                        [:digit:]

                                                        [:space:]

                                                        [:punct:]

                                                        [:alnum:]

 

                    練習:

                                顯示/etc/目錄下,以非字母開頭,後面跟了一具字母及其它任意長度任意字符的文件或目錄;

 

                                複製/etc目錄下,所有以.d結尾的文件或目錄至/tmp/mageedu.com目錄中;

 

        (2) 組合鍵

 

                    Ctrl+l:清屏

                    Ctrl+a: 切換至命令行首

                    Ctrl+e:切換至命令行尾

                    Ctrl+c:取消命令執行

 

                    Ctrl+u:刪除光標所在處至行首的內容;

                    Ctrl+k: 刪除光標所在處至行尾的內容;

 

 

        (3) IO重定向和管道

 

                    程序:指令+數據

                                讀入數據:Input

                                輸出數據:Output

 

                    打開的文件都一個fdfile descriptor

 

                    標準輸入:keyboard, 0,/dev/stdin

                    標準輸出:monitor, 1,/dev/stdout

                    標準錯誤輸出:monitor, 2,/dev/stderr

 

                    I/O重定向:

                                輸入重定向

                                輸出重定向:

                                            COMMAND> NEW_POS, COMMAND >> NEW_POS

                                            >:覆蓋重定向;

                                            >>:追加重定向;

 

                                            set-C

                                                        如果覆蓋重定向目標文件存在,則禁止執行;

                                                        >|

                                            set+C

 

                                錯誤重定向:

                                            2>:覆蓋

                                            2>>:追加

 

                    同時重定向標準輸出流和錯誤輸出流:

                                COMMAND >/path/to/file.out 2> /path/to/file.err

 

                                COMMAND >/path/to/file.out 2>&1

 

                                COMMAND&> /path/to/file.out

 

                    輸入重定向:

                                <

 

                                tr命令:

                                            tr[OPTION]... SET1 [SET2]

                                                        -d:刪除字符

 

                    Here Document<<

                                cat >>/path/to/somefile << EOF

 

        管道:

                    COMMAND1 | COMMAND2 | ...

 

                    練習:tee命令的用法;

 

使用整數[編輯]

Bourne shell不同的是bash不用另外生成進程即能進行整數運算。bash使用((...))命令和$[...]變量語法來達到這個目的:

 

 VAR=55             # 將整數55賦值給變量VAR

 ((VAR = VAR + 1))  # 變量VAR1。注意這裏沒有'$'

 ((++VAR))          # 另一種方法給VAR1。使用C語言風格的前綴自增

 ((VAR++))          # 另一種方法給VAR1。使用C語言風格的後綴自增

 echo $((VAR * 22)) # VAR乘以22並將結果送入命令

 echo $[VAR * 22]   # 同上,但爲過時用法

((...))命令可以用於條件語句,因爲它的退出狀態是0或者非0(大多數情況下是1),可以用於是與非的條件判斷:

 

 if((VAR == Y * 3 + X * 2))

 then

         echo Yes

 fi

 

 ((Z > 23)) && echo Yes

((...))命令支持下列比較操作符:'==', '!=','>', '<', '>=',和'<='

 

bash不能在自身進程內進行浮點數運算。當前有這個能力的unix shell只有Korn shellZ shell

 

輸入輸出重定向[編輯]

bash擁有傳統Bourne shell缺乏的I/O重定向語法。bash可以同時重定向標準輸出和標準錯誤,這需要使用下面的語法:

 

 command &> file

這比等價的Bourne shell語法"command> file 2>&1"來的簡單。2.05b版本以後,bash可以用下列語法重定向標準輸入至字符串(稱爲here string):

 

 command <<< "string to be readas standard input"

如果字符串包括空格就需要用引號包裹字符串。

 

例子: 重定向標準輸出至文件,寫數據,關閉文件,重置標準輸出。

 

 # 生成標準輸出(文件描述符1)的拷貝文件描述符6

 exec 6>&1

 # 打開文件"test.data"以供寫入

 exec 1>test.data

 # 產生一些內容

 echo "data:data:data"

 # 關閉文件"test.data"

 exec 1>&-

 # 使標準輸出指向FD 6(重置標準輸出)

 exec 1>&6

 # 關閉FD6

 exec 6>&-

打開及關閉文件

 

 # 打開文件test.data以供讀取

 exec 6<test.data

 # 讀文件直到文件尾

 while read -u 6 dta

 do

   echo "$dta"

 done

 # 關閉文件test.data

 exec 6<&-

抓取外部命令的輸出

 

  # 運行'find'並且將結果存於VAR

  # 搜索以"h"結尾的文件名

  VAR=$(find . -name "*h")

進程內的正則表達式[編輯]

bash3.0支持進程內的正則表達式,使用下面的語法:

 

 [[ string =~ regex ]]

正則表達式語法同regex(7) man page所描述的一致。正則表達式匹配字符串時上述命令的退出狀態爲0,不匹配爲1。正則表達式中用圓括號括起的子表達式可以訪問shell變量BASH_REMATCH,如下:

 

 if [[ abcfoobarbletch =~ 'foo(bar)bl(.*)' ]]

 then

         echo The regex matches!

         echo $BASH_REMATCH      -- outputs: foobarbletch

         echo ${BASH_REMATCH[1]} -- outputs:bar

         echo ${BASH_REMATCH[2]} -- outputs:etch

 fi


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