中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

bash 基礎

發布時間:2020-09-25 02:27:43 來源:網絡 閱讀:464 作者:嘀充值成功 欄目:開發技術

概述:

    歷史命令(history)、調用上一個命令最后一個參數(esc+.或!$)、命令展開機制(~,{,})、回顯命令狀態(echo $?)、引用命令執行結果($(command)或'command')、bash引用(強引用(“ ”)、弱引用(' ')。)、bash快捷鍵(ctrl+ a\e\u\k\l)、文件名通配(*\?\[ ]\[^ ])、輸入輸出錯誤重定向(>\>>\<\<<\2>\2>>\&>\&>>)、tr命令(替換字符)、tee(輸出一份到屏幕,同時保留一份到文件)、hash(緩存或顯示此前的命令)、shell變量、多命令執行(command1;comamnd2)


 

1、history:命令歷史(設置、調用、控制)


a)、命令用法(shell進程會在會話中保存此前用戶提交執行過的命令)

#history            //包括正常關機以前的命令,

[root@localhost ~]# type history    //history是個內嵌命令

history 是 shell 內嵌


#echo $HISTSIZE        //顯示命令歷史條數

HISTSIZE:他是一個環境變量,

HISTFILE: 每個用戶下都有一個自己的保存歷史命令的文件,且是隱藏的如:(.bash_history)。

#cat  .bash_history        //不會保存用戶剛剛用過的命令,只有用戶退出當前shell時才保存。


#echo $HISTFILESIZE        //顯示命令歷史文件的大小。

[root@localhost ~]# echo $HISTSIZE

1000

[root@localhost ~]# echo $HISTFILESIZE

1000


history命令用法:

[root@localhost ~]# help history

history: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 參數 [參數...]

    顯示或操縱歷史列表。

-c:清空命令歷史

-d # :刪除指定位置的歷史命令

-d # n:刪除從#位置開始的n個歷史命令

-r: 從文件中讀取歷史命令

-w:將命令歷史寫入歷史文件中。

-n: 顯示最近的n條命令


b)、命令歷史調用 

b1)、通過上下鍵來選擇

b2)、通過!(感嘆號)來實現:

#!n: 再一次執行歷史命令列表中的第#條命令。

#!!:再一次執行上一條命令

#!STRING:在一次執行命令歷史列表中最近一個以STRING開頭的命令。

        

C)、調用上一條命令的最后一個參數

c1)、按下ESC鍵松開后再按點號(及esc+.)

如:

[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-eno16777736

/etc/sysconfig/network-scripts/ifcfg-eno16777736

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eno16777736    //cat后輸入esc+. ,會自動補充參數。


c2)、通過!$來實現

如:

[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-eno16777736

[root@localhost ~]# cat !$            //

cat /etc/sysconfig/network-scripts/ifcfg-eno16777736


d)、控制歷史命令記錄的方法:

環境變量:HISTCONTROL

如:

[root@localhost ~]# echo $HISTCONTROL

ignoredups                //忽略重復的命令,重復是指緊挨著的兩個命令一樣,如果中間有間隔則不算。

[root@localhost ~]#


HISTCONTROL變量有三種值:

    ignoredups:忽略重復的值

    ignorespace:忽略以空白字符開頭的命令

    ignoreboth:同時忽略兩種以上情況

如:

[root@localhost ~]# HISTCONTROL=ignorespace    //改變命令歷史的變量的值。

[root@localhost ~]# echo $HISTCONTROL

ignorespace                //命令歷史不記錄以空白字符開頭的命令

[root@localhost ~]#



2、命令補全:(tab)

        shell程序在接收到用戶執行命令的請求時,分析完成之后,最左側的字符串會被當做命令執行:

        命令查找處理機制:

                查找內部命令:根據PATH環境變量中設定的目錄,自左向右查找目錄下的文件名:


3、路徑補全:(tab)

        根據給定的起始路徑下的字符串開頭來補全。


4、命令行展開機制:

a)、~:    自動展開為用戶的家目錄,或者指定用戶的家目錄。

b)、{ } :可承載一個以逗號(,)分隔的路徑列表,并能夠將其展開為多個路徑

    如:/tmp/{a,b} 相當于/tmp/a;/tmp/b


5、#echo $?:命令執行的狀態結果(bash通過狀態返回值來輸出結果)

狀態返回值:    

    成功:0

    失敗:1-255

命令執行完成之后,其狀態返回值會保存于bash的特殊變量$?中,且只能獲得最近那條命令的執行結果:

如:

[root@localhost ~]# ls -ld /etc

drwxr-xr-x. 163 root root 12288 11月 13 14:49 /etc

[root@localhost ~]# echo $?

0

[root@localhost ~]# ls /ett

ls: 無法訪問/ett: 沒有那個文件或目錄

[root@localhost ~]# echo $?

2

[root@localhost ~]# ecc /ec

bash: ecc: 未找到命令...

相似命令是: 'esc'

[root@localhost ~]# echo $?

127

[root@localhost ~]#



6、引用命令的執行結果

方法一:$(command) :$符號加上命令;

方法二:`command':    反引號括起來的命令;(一般不用此格式)

如:

[root@localhost ~]# date +%T

15:12:03

[root@localhost ~]# date +%H-%M-%S

15-12-37

[root@localhost ~]# date

2016年 11月 13日 星期日 15:12:45 CST

[root@localhost ~]# mkdir $(date +%H-%M-%S)        //運行引用命令時,先執行$后命令date +%H-%M-%S,將其結果作為變量 ,作為mkdir的參數執行。

[root@localhost ~]# ls

15-14-09  anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  視頻  圖片  文檔  下載  音樂  桌面

[root@localhost ~]#

[root@localhost ~]# mkdir `date +%H-%M-%S`

[root@localhost ~]# ls

15-14-09  15-19-26  anaconda-ks.cfg  initial-setup-ks.cfg  公共  模板  視頻  圖片  文檔  下載  音樂  桌面

[root@localhost ~]#


7:bash的引用:

a)、強引用(' '):任何字符串不做替換

b)、弱引用(" "):變量字符串會做替換

c)、命令引用$(command):


8、bash快捷鍵:

a)、ctrl+a:跳轉至命令的開始位置;

b)、ctrl+e:跳轉至命令行尾;

c)、ctrl+u:刪除命令行首至光標位置的字符;

d)、ctrl+k:刪除光標位置至行尾的字符;

e)、ctrl+l:清屏,相當于clear


9、變量:命名的內存空間。

    變量存儲類型:×××、浮點型、字符型、布爾型、日期時間型

    變量對計算機來說只有兩種:字符型、數值型(精確數值,近似數值)

    變量類型確定了變量的存儲格式、數據范圍、參與的運算;


10、文件名通配(globbing)

匹配模式:通過元字符來實現;元字符有:*、?、[ ]、[^ ]

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

    ?: 匹配任意單個字符;

    [ ]:    匹配指定范圍內的單個字符;

            [a-z],[A-Z]:不區分大小寫,匹配a-z中任意單個字母

            [0-9]:匹配0-9中的任意單個數字

            [a-z0-9]:匹配a-z0-9中的任意單個字符(不區分大小寫)

            [abcdefg]:匹配abcdefg中任意一個字符。如:pa[0-9][0-9]:以pa開頭的后接兩個數字

            [[:upper:]]:任意大寫A-Z字母中一個(外面的[ ]表示范圍,里面的[:upper:]表示大寫字母集合,以下雷同;如:[[:upper:]][0-9]:表示以任意單個大寫字母開頭后接一個數字的文件。

            [[:lower:]]:表示所有的小寫字母中的單個字符;

            [[:alpha:]]:表示所有字母中的一個,相當于[[:upper:][:lower:]];

            [[:digit:]]:表示所有數字中的一個;

            [[:alnum:]]表示所有的字母和數字中的一個;

            [[:space:]]:表示所有空白字符中的一個;

            [[:punct:]]:所有標點符號中的一個;

    [^ ]:匹配指定范圍外的單個字符;

            [^[:upper:]]: 匹配非大寫字母中的一個字符

            [^0-9]:匹配非0-9中的單個字符

            [^[:alnum:]]:匹配非正常字符(字母和數字為正常字符)的單個字符


11、IO重定向

可用于輸入的設備:文件(鍵盤、文件設備、網卡等)

可用于輸出的設備:文件(顯示、文件設備、網卡等)

程序數據流:

        輸入數據流:標準輸入 鍵盤

        輸出數據流:標準輸出 顯示器

        錯誤輸出流:錯誤輸出 顯示器

標準輸入 0; 標準輸出1 ;錯誤輸出2;


a1)、輸出重定向: >(用大于號表示(覆蓋目標文件);輸出重定向的標準輸出是顯示器,現在讓它輸出到其他地方)

a2)、輸出重定向: >>(用兩個大于號表示(追加輸出到目標文件);輸出重定向的標準輸出是顯示器,現在讓它輸出到其他地方)

如:

[root@localhost ~]# cat /etc/passwd > user        //將輸出到顯示器上的東西輸出到user文件。

[root@localhost ~]# cat /etc/passwd /dev/tty1        //將輸出結果重定向到虛擬終端tty上。(主要安全,)


a3)、#set -C :禁止覆蓋輸出重定向至已存在的文件。強制覆蓋>|

            #set +C:啟用覆蓋輸出重定向;

注意:> ; >>僅對正確的輸出重定向


b)、錯誤輸出重定向:2> ; 2>>

c1)、合并正常輸出流和錯誤輸出流:&>; &>>

c2)、合并正常輸出流和錯誤輸出流:command > /path/to/somefile 2>&1

            合并正常輸出流和錯誤輸出流:command >> /path/to/somefile 2>&1

特殊設備:/dev/null  


d1)、輸入重定向:<


tr命令:轉換或刪除字符:(只能從標準輸入中取值,不會修改原文件)

 tr [OPTION]... SET1 [SET2]  

把輸入的數據當中的字符,凡是在set1定義范圍內出現的字符,通通一對一的轉換為set2出現的字符

如:tr abc ABC     //將a換成A,將b換成B,將c換成C;

[root@localhost ~]# tr  [a-z] [A-Z] < /etc/passwd

[root@localhost ~]# tr -d 'abc' < /etc/issue    //刪除重定向輸入中的指定字符abc

\S

Kernel \r on n \m

[root@localhost ~]#


d2)、輸入重定向:<<  (存檔用)

#cat > /path/to/somewhere <<eof        //表示輸入時遇到eof停止輸入,將此前輸入的數據保存到somewhere中。(注意;eof可換成自己想要的字符)


12、| 管道命令:前一個命令的輸出作為下一個命令的輸入。(tee命令管道分發作用)

command1 | command2 | ......

如:

[root@localhost ~]# cat /etc/issue | tr 'a-z' 'A-Z'    //cat的輸出作為tr的輸入

\S

KERNEL \R ON AN \M

[root@localhost ~]#


[root@localhost ~]# cat /etc/issue | tee /tmp/issue.tee | tr 'a-z' 'A-Z'    //將cat命令輸出給tee,tee保留一份到/tmp/issue.tee,并另一份給tr做輸入

\S

KERNEL \R ON AN \M

[root@localhost ~]#


tee:command | tee /path/to/somewhere,    tee輸出一份到屏幕,保留一份到文件somewhere。


13、命令hash:緩存或顯示此前命令的位置。(命令的執行順序先從hash緩存中查找,如果沒有,在從$PATH環境命令中從左至右一次查找。

[root@promote ~]# ls -d /etc

/etc

[root@promote ~]# tail -1 /etc/passwd

fedora:x:1002:1002::/users/fedora:/bin/bash

[root@promote ~]# hash

hits    command

   1    /usr/bin/tail

   1    /usr/bin/ls

[root@promote ~]#


[root@promote ~]# type hash //查看hash命令類型

hash is a shell builtin

[root@promote ~]# help hash    //查看內部命令幫助

hash: hash [-lr] [-p pathname] [-dt] [name ...]

#hash -d:忘記hash命令

#hash -r:清空hash命令    //當命令移到其他位置時,需要清空緩存。



14、shell變量:

變量賦值:name=value

變量類型:變量存儲值得類型,為了防止變量在內存中溢出,需要定義類型。變量類型決定了變量的存儲格式,數據范圍和參與的運算。

變量語言:強類型變量語言、弱類型變量語言。

bash是一種弱類型變量,他把所有變量類型視作字符型,bash變量不支持浮點型;bash中的變量不用事先申明。

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

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

變量命名規范:由字母、數字、下劃線一種或多種組成,不能以數字開頭。

bash變量類型根據作用范圍劃分:本地變量、環境變量、局部變量、位置參數變量、特殊變量。

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

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

局部變量:作用域僅為某代碼片段;

位置參數變量:用于在shell腳本內部,向執行腳本傳遞的參數;

特殊變量:shell內置的有特殊功用的變量(如:$?)


變量定義的方式:

    本地變量:

        變量賦值:name=value

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

            "  " :弱引用,變量名會替換為值

             ' ':強引用,變量名不會替換為值

        查看變量:set

        變量撤銷:unset  name    //不要加$

     

    環境變量:

         變量賦值一:export name=value

         變量賦值二 :name=value

                                export value

         變量賦值三: declare -x name=value       

         變量賦值四:    name=value

                                declare -x name     

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

注意:bash內置了許多環境變量(通常為全大寫字母),用于定義bash的工作環境。(如:PATH\HISTFILE\HISTSIZE\SHELL\PWD\HOME\UID      

        查看變量:export、delcare -x、printenv、env(都可以查看)

        變量撤銷:unset  name    //不要加$

查看進程樹:pstree


定義只讀變量一:delcare -r name //變成只讀變量將無法撤銷,不能改變值,存活為當前shell生命周期。

定義只讀變量二:readonly name    //變成只讀變量將無法撤銷,不能改變值,存活為當前shell生命周期。


15、多命令執行:

格式:#命令1;命令2;命令n;.....    //命令先后執行,命令之間沒有邏輯執行。

邏輯運算:

    與、或、非、異或;

短路運算:

    #COMMAND1 && COMMANG2    //command1為假,則后面的命令不在執行,否則,必須執行

    #COMMAND1 || COMMAND2        //command1為真,則后面的命令不執行,否則,必須執行后面的命令

如:

[root@promote ~]# touch abc.txt && tail -1 /etc/passwd > abc.txt    //如果前面的命令為真,執行后面的

[root@promote ~]# echo $?

0

[root@promote ~]# cat abc.txt

fedora:x:1002:1002::/users/fedora:/bin/bash

[root@promote ~]#


[root@promote ~]# id username || useradd username    //如果前面的命令為假,則執行后面的命令。

id: username: no such user

[root@promote ~]# id username

uid=1003(username) gid=1003(username) groups=1003(username)

[root@promote ~]#


16、shell腳本編程:

編程語言分類:(根據運行方式劃分)

    編譯運行:源代碼--->編譯器(編譯成二進制文件)--->程序文件        //如c語言

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


根據其編程過程中調用庫文件還是外部的程序文件劃分:

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

    完整編程:通過調用庫文件或依靠程序本身進行編程。


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

    程序=指令+數據

    過程式編程語言:以指令為中心來組織代碼,數據是服務于代碼;(順序執行;選擇執行;循環執行);如c語言,bash,c++,python

    面向對象編程語言: 以數據為中心來組織代碼,圍繞數據來組織指令。(對象:類,方法);如:java,c++,python


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


編寫shell腳本:

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

    常見的解釋器:

    #!/bin/bash

    #!/usr/bin/python

    #!/usr/bin/perl


腳本就是命令的堆積,腳本中的空白行會被忽略,同時,除了shebang,其他以#開頭的行都會被認為注釋行而被忽略。


運行腳本:(shell腳本運行是在shell子進程下實現的

    (1)、賦予腳本執行權限,并直接運行此程序文件。

                    #chmod +x  /path/to/script_file

                    #./script_file或/path/to/script_file

    (2)、#bash script_file    //直接運行解釋器,將腳本以命令行參數傳遞給解釋器程序,此時script_file可以去掉執行權限。


文本編輯器:

行編輯器:sed

全屏編輯器:nano、vi、vim


17、bash的配置文件:(所有在命令行中的定義的變量或參數,都會隨著shell的終止而終止,如果希望定義的參數一直在,可以通過更改bash配置文件來實現。)

bash配置文件有兩類:profile類、bashrc類。

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

bashrc類:為非交換式登錄的shell提供配置。


登錄類型:

交互式登錄shell進程:直接通過某終端(tty\pts\ttys等)輸入賬號和密碼后登錄打開的shell進程;使用su - username或者su -l username執行的登錄切換。

非交換式登錄shell進程:使用su username執行的登錄切換;圖形界面下打開的終端;運行腳本;


profile類:(全局profile類、用戶個人profile類)根據生效范圍劃分

    全局profile類:對所有用戶都生效;/etc/profile、/etc/profile.d/*.sh

     個人profile類:只對單個用戶生效;~/.bash_profile(個人家目錄下的)

profile類的功能:1、用于定義環境變量;2、運行命令或腳本

交互式配置文件讀取次序:/etc/profile--->/etc/profile.d/*--->~/.bash_profile--->~/.bashrc--->/etc/bashrc


bashrc類:(全局bashrc類、用戶個人bashrc類)根據生效范圍劃分

    全局bashrc類:/etc/bashrc

    用戶個人bashrc類:~/.bashrc(個人家目錄下)

bashrc類的功能:1、定義本地變量;2、定義命令別名

非交換式配置文件讀取次序:~/.bashrc--->/etc/bashrc--->/etc/profile.d/*


備注:僅有管理員有權限修改全局

            命令行中定義的特性,如變量和別名作用域為當前shell進程的生命周期;配置文件定義的特性,只對隨后新啟動的shell進程有效。

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

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

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

                        #source  /PATH/FROM/CONF_FILE

                    或#.  /PATH/FROM/CONF_FILE(如:#.  .bashrc)



18、bash腳本編程之算術運算:(+、-、*、/、%、**等)

linux中會把變量視為字符型數據,定義兩個×××變量相加,輸出仍會是字符型;如:

[root@promote tmp]# num1=1

[root@promote tmp]# num2=2

[root@promote tmp]# echo $num1+$num2

1+2

[root@promote tmp]# echo "$num1+$num2"

1+2

[root@promote tmp]#


算術運算格式:乘法符號可能需要轉義符

    1)let

[root@promote tmp]# help let

let: let arg [arg ...]

    Evaluate arithmetic expressions.

如:

[root@promote tmp]# num1=1

[root@promote tmp]# num2=2

[root@promote tmp]# let sum=$num1+$num2

[root@promote tmp]# echo $sum

3

[root@promote tmp]#


    2)$[算術運算表達式]

    3)$((算術運算表達式))

    4)expr  變量1 運算符 變量2     //需要空格,不常用

如:

[root@promote tmp]# num1=1

[root@promote tmp]# num2=2

[root@promote tmp]# expr $num1 + $num2

3

[root@promote tmp]# sum=$(expr $num1 + $num2)

[root@promote tmp]# echo $sum

3

[root@promote tmp]#



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平原县| 三都| 扬中市| 延川县| 曲麻莱县| 苍南县| 东台市| 旬阳县| 和静县| 荥阳市| 莱芜市| 庆阳市| 光泽县| 呈贡县| 滦平县| 剑河县| 新巴尔虎右旗| 东兰县| 边坝县| 宜兰市| 临海市| 上饶市| 阳东县| 随州市| 德阳市| 攀枝花市| 河间市| 溧阳市| 武汉市| 张家界市| 开平市| 永春县| 多伦县| 体育| 大埔县| 太湖县| 迭部县| 安陆市| 顺义区| 梁平县| 泾川县|