日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux中的bash shell的特性

發布時間:2024/1/17 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux中的bash shell的特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

linux中的bash shell特性(基礎)

Shell也稱命令行解釋器,是我們對linux進行操作最直接的接觸的腳本,所以說這對我們的今后的學習過程中非常重要。

當然,linux這種功能強大的操作系統,不可能只有一個shell,我們可以cat一下/etc/shells/,就會發現我們的linux有好多shell,

[root@localhost?~]#?cat?/etc/shells /bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin /bin/tcsh /bin/csh

雖然linux可以讓我們切換不同的shell,但是,每切換一個shell,只不過是建立一個子進程,所以我們用完exit即可退出,最好不要一直切換,每切換一個,就先exit上一個。非常注意的一點,除了/sbin/nologin之外,其他的shell都可以用來測試使用,因為這個shell是沒有用戶登錄模式。

接下來我們著重說,bash shell的特性:

一、就是可以使用別名

????alias - 定義或顯示別名。
?? ??? ??? ? alias [-p] [名稱[=值] ... ]
?? ??? ??? ? 注意:如果alias命令不帶任何選項和參數,則表示顯示所有已經定義并生效的別名設置;

?? ??? ??? ? # alias ALIAS='COMMAND [OPTION]...[ARGUMENT]...'

?? ??? ?unalias
?? ??? ??? ?unalias - 從別名定義列表中刪除每一個“名字‘。

?? ??? ??? ?unalias [-a] 名稱 [名稱 ...]

[root@localhost?~]#?alias?mp='mkdir?-pv' [root@localhost?~]#?alias alias?cp='cp?-i' alias?egrep='egrep?--color=auto' alias?fgrep='fgrep?--color=auto' alias?grep='grep?--color=auto' alias?l.='ls?-d?.*?--color=auto' alias?ll='ls?-l?--color=auto' alias?ls='ls?--color=auto' alias?mp='mkdir?-pv' alias?mv='mv?-i' alias?rm='rm?-i' alias?which='alias?|?/usr/bin/which?--tty-only?--read-alias?--show-dot?--show-tilde'[root@localhost?~]#?mp?/tmp/test.txt mkdir:?已創建目錄?"/tmp/test.txt"[root@localhost?~]#?unalias?mp [root@localhost?~]#?mp?/tmp/test.txt bash:?mp:?未找到命令...

?? ??? ?注意:
?? ??? ??? ?無論使用alias還是unalias命令,其功能都會立即生效;這兩命令的生命周期僅為當前shell的生命期;一旦注銷登錄,相當于關閉了bash,則使用alias命令定義的別名或使用unalias命令刪掉的別名也會失效。

?? ??? ?對于每個用戶來說,都有一個私有的bash的配置文件,就在用戶的家目錄中的一個隱藏文件,文件名為“.bashrc”,其主要功能就是用來保存命令的別名的定義;

?? ??? ??? ?注意:
?? ??? ??? ??? ?在對于此文件中的命令別名進行便并保存之后,在當前已經運行的bash中并不會立即生效,需要重新加載此文件 才能使配置生效,以下兩種操作皆可實現;
?? ??? ??? ??? ??? ?1.重啟bash,注銷之后再次登錄即可;
?? ??? ??? ??? ??? ?2.執行文件中定義的命令:使用source命令,或者.命令;

[root@localhost?~]#?ls?-a .????????????????.bash_logout???.config????ex????????????????????.swp??????模板??下載 ..???????????????.bash_profile??.cshrc?????.ICEauthority?????????.tcshrc???視頻??音樂 anaconda-ks.cfg??.bashrc????????.dbus??????initial-setup-ks.cfg??.viminfo??圖片??桌面 .bash_history????.cache?????????.esd_auth??.local????????????????公共??????文檔 [root@localhost?~]#?cat?.bashrc #?.bashrc #?User?specific?aliases?and?functions alias?rm='rm?-i' alias?cp='cp?-i' alias?mv='mv?-i' #?Source?global?definitions if?[?-f?/etc/bashrc?];?then.?/etc/bashrc fi

?? ??? ??? ??? ?source(用source來執行一遍.bashrc目錄,這樣不用注銷別名就可以立即生效)
?? ??? ??? ??? ??? ?source - 在當前 shell 中執行一個文件中的命令。
?? ??? ??? ??? ??? ?. - 在當前 shell 中執行一個文件中的命令。

?? ??? ??? ??? ??? ?格式:source/. 文件名 [參數]

二、bash的快捷鍵;
?? ??? ?C:表示Ctrl鍵
?? ??? ?M:Alt鍵
?? ??? ?E:Esc鍵
?? ??? ?DEL:Backspace鍵

?? ??? ?C-l:清屏,相當于clear命令;
?? ??? ?C-a:光標跳轉至命令行編輯模式的行首;
?? ??? ?C-e:光標跳轉至命令行編輯模式的行尾;
?? ??? ?C-k;刪除命令行編輯模式的光標所在位置至行尾的內容;
?? ??? ?C-u;刪除命令行編輯模式的光標所在位置至行首的內容;
?? ??? ?C-c:結束前臺進程;
?? ??? ?M-.;引用上一個命令中的最后一個參數;(在Xshell中不能用)
?? ??? ?E,.:功能同M-.
?? ??? ??? ?(這一個不是同時摁,摁一下Esc,在摁一下.);


?? ?三.命令歷史
?? ??? ?bash進程會保存其會話中的用戶曾經執行過的命令,以方便用戶重復執行某個命令操作;
?? ??? ??? ?命令歷史包括兩方面:
?? ??? ??? ??? ?1.用戶曾經執行過的命令;
?? ??? ??? ??? ?2.用戶曾經執行過的命令的路徑;

?? ??? ??? ?在bash中有一個內置的變量PATH,PATH變量的值為當給錢系統中所有的命令的文件所在的路徑的集合;

?? ??? ?命令如何被shell執行的?
?? ??? ??? ?bash會將命令行的內容按照空白字符進行切片,分析第一個切片內容;
?? ??? ??? ??? ?1.判斷第一個切片的內容是內部命令還是外部命令;
?? ??? ??? ??? ??? ?如果是內部命令,直接運行;
?? ??? ??? ??? ??? ?如果是外部命令,先找hash表中的路徑緩存,如果有,則直接執行;否則需要通過查找PATH變量所包含路徑中,是否有對應名稱的文件;

?? ??? ??? ??? ??? ?使用hash命令查看被記住的命令文件的路徑;
?? ??? ??? ??? ??? ??? ?-r;清空hash表;

?? ??? ??? ??? ??? ?使用history命令查看被記住的命令的命令行參數;
?? ??? ??? ??? ??? ? history - 顯示或操縱歷史列表。
?? ??? ??? ??? ??? ? 格式: history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 history -ps 參數 [參數...]

?? ??? ??? ??? ??? ? ?? ?常用選項:
?? ??? ??? ??? ??? ? ?? ??? ?-c?? ?刪除所有條目從而清空歷史列表。
?? ??? ??? ??? ??? ? ?? ??? ?-d 偏移量?? ?從指定位置刪除歷史列表。

[root@localhost?~]#?history?3327??2017-10-23?21:48:15?history?-10328??2017-10-23?21:48:40?history?10329??2017-10-23?21:49:07?history?3 [root@localhost?~]#?history?-d?328 [root@localhost?~]#?history?3328??2017-10-23?21:49:07?history?3329??2017-10-23?21:49:24?history?-d?328330??2017-10-23?21:49:27?history?3

?? ??? ??? ??? ? 重復執行歷史緩沖區的命令:
?? ??? ??? ??? ??? ? ?? ?!NUMBER:重復執行歷史緩沖區中編號“NUMBER”的命令;
?? ??? ??? ??? ??? ? ?? ?!STRING:重復執行里緩沖區中以“STRING”開頭的最后一次執行過的命令;
?? ??? ??? ??? ??? ? ?? ?!?STRING:重復執行里緩沖區中包含了“STRING”的最后一次執行過的命令;
?? ??? ??? ??? ??? ? ?? ?!-NUMBER:重復執行歷史緩沖區中倒數第“NUMBER”條命令;
?? ??? ??? ??? ??? ? ?? ?使用上、下arrow可以從歷史緩沖區中調用命令,回車后執行;
?? ??? ??? ??? ??? ? ?? ?C-r:在歷史緩沖區中實行搜索,回撤之后執行;

?? ??? ??? ??? ??? ? ?? ?!$:在歷史緩沖區中調用最后一個命令的最后一個參數;
?? ??? ??? ??? ??? ? ?? ?!^:在歷史緩沖區中調用最后一個命令的第一個位置的參數;
?? ??? ??? ??? ??? ? ?? ?!:NUMBER:在歷史緩沖區中調用最后一個命令的第"NUMBER"的參數;

?? ??? ??? ??? ??? ? ?? ?!SEQUENCE:NUMBER:歷史緩沖區中調用第“SEQUENCE”條命令第“NUMBER”個參數;

在bash中與命令歷史相關的內置變量:
?? ??? ??? ??? ??? ??? ?HISTSIZE:歷史緩沖區中能夠保存的命令歷史的最大條目數量,默認是1000;
?? ??? ??? ??? ??? ??? ?HISTFILESIZE: ~/.bash_history文件中能夠保存的命令歷史的最大條目數量,默認值1000;
?? ??? ??? ??? ??? ??? ?HISTTIMEFORMAT: 在命令歷史緩沖區中記錄歷史命令時,同時記錄命令的執行的時間戳標記;可以使用date命令的FORMAT來表示時間的記錄格式;默認值為空;
?? ??? ??? ??? ??? ??? ?HISTCONTROL:控制命令歷史的記錄方式;
?? ??? ??? ??? ??? ??? ??? ?ignoredups:忽略連續且相同的命令被記錄到歷史緩沖區,此為默認值;
?? ??? ??? ??? ??? ??? ??? ?ignorespace:以空白字符開頭的命令不會被日記錄到歷史緩沖區;
?? ??? ??? ??? ??? ??? ??? ?ignoreboth:上述兩種情況都不會被記錄到歷史緩沖區;

[root@localhost?~]#?export?HISTTIMEFORMAT="%F?%T?" [root@localhost?~]#?history?5180??2017-10-23?18:16:53?export?HISTTIMEFORMAT="%F?%T"181??2017-10-23?18:17:16?echo?$HISTTIMEFORMAT182??2017-10-23?18:18:07?history183??2017-10-23?18:18:43?export?HISTTIMEFORMAT="%F?%T?"184??2017-10-23?18:18:53?history?5

四.命令補全————(Tab)
?? ??? ?包括兩個方向的內容:
?? ??? ??? ?1.構成命令字符串的補全;
?? ??? ??? ??? ?參考PATH變量中的路徑,對命令進行補全;
?? ??? ??? ??? ??? ?如果給出的字符串在PATH變量對應的路徑是唯一的,則直接補全命令;
?? ??? ??? ??? ??? ?如果給出的字符串在PATH變量對應的路徑不唯一,則bash給出提示;
????????????????(如果路徑太長,或者目錄名字太長的,可以直接用tab鍵補齊)
?? ??? ??? ?2.命令中參數所對應的字符串的補全;
?? ??? ??? ??? ?根據給出的路徑進行補全;
?? ??? ??? ??? ??? ?如果給出的字符串在給出的路徑對應的路徑是唯一的,則直接補全命令;
?? ??? ??? ??? ??? ?如果給出的字符串在給出的路徑對應的路徑不唯一,則bash給出提示;

五.命令行展開
?? ??? ?1.~展開:
?? ??? ??? ?~:bash會自動將其展開為當前登錄用戶的家目錄;
?? ??? ??? ?~STRING:bash會自動將其展開為以“STRING”為用戶名的家目錄;

?? ??? ??? ?~+:調用bash的內置變量“pwd”的值;
?? ??? ??? ?~-:調用bash的內置變量“OLDPWD”的值;

[root@localhost?~]#?~+ -bash:?/root:?是一個目錄 [root@localhost?~]#?~- -bash:?/tmp:?是一個目錄

?? ??? ?2.{}展開;
?? ??? ??? ?在“{}”中,可以填充一個以“,”分隔的路徑列表,bash會將其展開為多個獨立的路徑;
?? ??? ??? ?示例:mkdir -pv? /mnt/{boot/grub,sysroot/{proc,sys,bin,sbin,lib/modules,usr/{bin,sbin,lib},var/{run,log,lock},etc/init.d,dev,home,root,tmp}}

?? ??? ??? ?1.txt{,1.bak} == 1.txt 1.txt.bak

六.命令的執行結果
?? ??? ?在bash中,命令的執行結果有兩種:
?? ??? ??? ?1.執行命令的輸出結果:
?? ??? ??? ??? ?根據用戶的需求獲取到的命令執行的正常輸出結果;
?? ??? ??? ??? ?命令引用或命令替換:
?? ??? ??? ??? ??? ?``相當于$()
?? ??? ??? ??? ??? ?``:反向單引號,反引號;

?? ??? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ??? ?創建一個文件,文件名為test-系統時間
?? ??? ??? ??? ??? ??? ?~]#touch test-`date +%F-%H-%M-%S`

[root@localhost?~]#?cp?-a??/etc?/backup/etc-'date+%F-%T'[root@localhost?~]#?ll?/backup總用量?24drwxr-xr-x.?138?root?root?8192?10月?18?21:43?etcdrwxr-xr-x.?138?root?root?8192?10月?18?04:54?etc-date+%F-%T

? ??? ??? ?2.執行命令的狀態返回值;
?? ??? ??? ??? ?與此前的一個命令是否成功執行相關的返回內容;
?? ??? ??? ??? ?bash使用一個特殊的內置變量來保存其內容:$?
?? ??? ??? ??? ??? ?$?實際上保存的是一個數值,其數值范圍:0-255

?? ??? ??? ??? ??? ?其中:
?? ??? ??? ??? ??? ??? ?0:表示命令執行成功;
?? ??? ??? ??? ??? ??? ?1-255:表示命令執行失敗;
?? ??? ??? ??? ??? ??? ?1,2,127:bash中內置的命令執行失敗的狀態返回值:
?? ??? ??? ??? ??? ??? ??? ?1:表示小問題
?? ??? ??? ??? ??? ??? ??? ?2:表示嚴重問題
?? ??? ??? ??? ??? ??? ??? ?127:表示命令本身出現問題:

[root@localhost?~]#?$? bash:?0:?未找到命令...

??? ??? ??? ??? ??? ??? ?其余數字(3-126 128-255):用戶可以自定義的失敗狀態的返回值;

七.引用功能:
?? ??? ?'':強引用
?? ??? ??? ?凡是被單引號引用的內容,bash在處理時,一律視其為普通字符,即使其本身是bash定義的具有特殊功能和作用字符亦是如此,但單引號本身除外;

?? ??? ?"":弱引用
?? ??? ??? ?凡是被雙引號引用的內容中,有些特殊字符仍會保留其特殊含義,如:$,\,""

[root@localhost?~]#?echo?'$PATH' $PATH [root@localhost?~]#?echo?"$PATH" /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


?? ?八.轉義功能:
?? ??? ?\:bash定義的轉義字符;大多數的情況下,“\”只能將其后面的一個字符轉義;

?? ??? ?\COMMAND:取消定義過的命令別名,而使用命令本身的功能;

[root@localhost?~]#?ls?-1 anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 [root@localhost?~]#?\ls?-1 anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 視頻 圖片 文檔 下載 音樂 桌面

這兩個命令是不一樣的,但是上傳的時候,顏色消失了,上邊的ls應該是有顏色的,\ls是沒有顏色的。

九.Globbing————文件名通配符,簡稱為globa;
?? ?*:匹配任意長度的任意字符或字符串:(某些特殊位置的“.”字符不能匹配;)
?? ??:匹配任意單個字符;(某些特殊位置的“.”字符不能匹配;)
?? ?[]:匹配指定范圍內的任意單個字符,必須匹配且只能匹配一個字符;
?? ??? ?指定范圍的方法:
?? ??? ??? ?1.枚舉法:列出所有有效字符;
?? ??? ??? ?2.范圍指令:
?? ??? ??? ??? ?[0-9]:表示所有單個的十進制數字;
?? ??? ??? ??? ?[a-z]:a,A,b,B,c,C......,y,Y,z
?? ??? ??? ??? ?[A-Z]:A,b,B,c,C,.....y,Y,z,Z
?? ??? ??? ?3.bash內建字符集:
?? ??? ??? ??? ?[:lower:]:所有小寫字母
?? ??? ??? ??? ?[:upper:]:所有大寫字母
?? ??? ??? ??? ?[:alpha:]:所有的字母,包括大小寫;
?? ??? ??? ??? ?[:digit:]:所有的單個的十進制數字;
?? ??? ??? ??? ?[:alnum:]:所有的字母和十進制數字;
?? ??? ??? ??? ?[:punct:]:所有的符號;
?? ??? ??? ??? ?[:space:]:表示空白字符,包括空格和制表符;

[root@localhost?etc]#?ls?[[:alpha:]][^[:alpha:]]*



?? ??? ???? 4.反向匹配:
?? ??? ??? ??? ?^
?? ??? ??? ??? ?示例:
?? ??? ??? ??? ??? ?#ls [^[:digit:]]???? //表示文件名的第二個字符不能使十進制數字;

?? ??? ??? ??? ?注意:當前括號中有“^”表示字符集反向匹配時,注意“*”的使用,因為“*”通配范圍可能會導致反向匹配失敗;此類失敗是因為在bash的globbing實在貪婪模式下匹配的;

十.管道
?? ??? ?|
?? ??? ?管道通常是用來連接多個命令的;將管道符號前面的命令的執行輸出結果通過管道傳遞給管道符號后面的命令,讓后面的命令將前面的命令的輸出結果當場參數使用;

?注意:
?? ??? ??? ? ?? ?1.一般來講,但是被管道連接的命令,都應該能夠在執行成功之后完成命結果的輸出,否則管道無意義,
?? ??? ??? ? ?? ?2.管道不是萬能的,有些場合沒法使用管道;

[root@localhost?~]#?head?-15?/etc/passwd|tail?-7|tee?/tmp/userstee:?/tmp/users:?是一個目錄mail:x:8:12:mail:/var/spool/mail:/sbin/nologinoperator:x:11:0:operator:/root:/sbin/nologingames:x:12:100:games:/usr/games:/sbin/nologinftp:x:14:50:FTP?User:/var/ftp:/sbin/nologinnobody:x:99:99:Nobody:/:/sbin/nologinsystemd-bus-proxy:x:999:998:systemd?Bus?Proxy:/:/sbin/nologinsystemd-network:x:192:192:systemd?Network?Management:/:/sbin/nologin


轉載于:https://blog.51cto.com/liujingyu/1975377

總結

以上是生活随笔為你收集整理的linux中的bash shell的特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。