Shell 各種符號 之 含義

#!:符號能夠被內核識別成是一個腳本的開始,這一行必須位于腳本的首行

$0:當前腳本的名字

$#:輸入<調用>參數(腳本或函數的位置參數)?的個數,如?NumArg=$#;echo"\$#: $#;\$NumArg: $NumArg"

$@:傳遞給腳本或函數的所有參數,按空格劃分成不同的部分。注意:?如果一個參數中有空格,這個參數將會被從空格($IFS默認)處分尸

"$@":分隔成單個參數,如"$1”“$2”“$3”,?$@以IFS(默認為空格)來劃分字段,如果空格在“”里面,不劃分即不會被分尸

$*:傳遞給腳本或函數的所有參數,按空格劃分成不同的部分,與$@沒有區別

"$*":擴展成一個參數,如"$1$2 $3",不論調用時傳入了多少個參數,都將被按原樣處理成一個整體性的參數使用。$@ $*只在被雙引號包起來的時候才會有差異

$?:上個命令或函數的返回值

$n:第幾個參數,n=3則$n是$3?,注意,$10?不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。

$$:當前shell腳本的進程ID

$!:用于保存運行的最后一個進程的PID 號。

$(command):內置命令替換操作符。Spid=$(pidof NmsServer)?或?echo $(pidof NmsServer)?等同于反引號:?`pidof NmsServer`

`command`:反斜杠——同上:$(command)?

?????注意:這兩種命令的執行方式,是在當前shell環境中,開啟了一個子進程,在這個子進程中執行命令并完成替換。所以當語句執行完回到主腳本中時,再訪問子進程中定義、修改的數據,注意徒勞!

${PIDLIST[@]}:數組PIDLIST的全部值

${#PIDLIST[@]}:獲取數組PIDLIST=(${Spid}?${Mpid} ${ProbePid})中的元素個數

${}:shell變量的引方式<更加明確的變量名稱的界定>;匹配與替換操作;

變量引用

pid=$(pgrep-f java)

echo ${pid}

輸出:3758564369 79366

echo ${pid}|awk '{print NF}'

輸出結果:6

echo "${pid}"

輸出:

37585

64369

79366

特殊的替換結構

${var:-string},${var:+string},${var:=string},${var:?string}

? ? ? ①${var:-string}和${var:=string}:若變量var為空,則用在命令行中用string來替換${var:-string},否則變量var不為空時,則用變量var的值來替換${var:-string};對于${var:=string}的替換規則和${var:-string}是一樣的,所不同之處是${var:=string}若var為空時,用string替換${var:=string}的同時,把string賦給變量var:?${var:=string}很常用的一種用法是,判斷某個變量是否賦值,沒有的話則給它賦上一個默認值。

? ? ? ② ${var:+string}的替換規則和上面的相反,即只有當var不是空的時候才替換成string,若var為空時則不替換或者說是替換成變量var的值,即空值。(因為變量var此時為空,所以這兩種說法是等價的)?

? ? ? ③${var:?string}替換規則為:若變量var不為空,則用變量var的值來替換${var:?string};若變量var為空,則把string輸出到標準錯誤中,并從腳本中退出。我們可利用此特性來檢查是否設置了變量的值。

? ? ??補充擴展:在上面這五種替換結構中string不一定是常值的,可用另外一個變量的值或是一種命令的輸出。

匹配替換結構

${var%pattern},${var%%pattern},${var#pattern},${var##pattern}

? ? ?第一種模式:${variable%pattern},這種模式時,shell在variable中查找,看它是否一給定的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最短的匹配模式

? ? ?第二種模式:?${variable%%pattern},這種模式時,shell在variable中查找,看它是否一給定]的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式

? ? ?第三種模式:${variable#pattern}?這種模式時,shell在variable中查找,看它是否一給定的模式pattern開始,如果是,就從命令行把variable中的內容去掉左邊最短的匹配模式

? ? ?第四種模式:?${variable##pattern}?這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式

? ? ?這四種模式中都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##才有區別。結構中的pattern支持通配符,*表示零個或多個任意字符,?表示僅與一個任意字符匹配,[...]表示匹配中括號里面的字符,[!...]表示不匹配中括號里面的字符。

字符串提取和替換

${var:num},${var:num1:num2},${var/pattern/pattern},${var//pattern/pattern}

第一種模式:${var:num},這種模式時,shell在var中提取第num個字符到末尾的所有字符。若num為正數,從左邊0處開始;若num為負數,從右邊開始提取字串,但必須使用在冒號后面加空格或一個數字或整個num加上括號,如${var: -2}、${var:1-3}或${var:(-2)}。???????

第二種模式:${var:num1:num2},num1是位置,num2是長度。表示從$var字符串的第$num1個位置開始提取長度為$num2的子串。不能為負數。

第三種模式:${var/pattern/pattern}表示將var字符串的第一個匹配的pattern替換為另一個pattern。。????????

第四種模式:${var//pattern/pattern}表示將var字符串中的所有能匹配的pattern替換為另一個pattern。

$[] $(())?:它們功能一樣,都是進行數學運算的。支持+ - * / %:分別為“加、減、乘、除、取模”。但是注意,bash只能作整數運算,對于浮點數是當作字符串處理的。

$IFS?:?shell的內部域分隔符。當?shell處理"命令替換"和"參數替換"時,shell 根據 IFS 的值,默認是 space, tab, newline來拆解讀入的變量,然后對特殊字符進行處理,最后重新組合賦值給該變量。IFS的默認值為:空白(包括:空格,tab,和新行).

將其ASSII碼用十六進制打印出來:

$ echo$IFS

?

$ echo"$IFS" | od -b

0000000040 011 012 012

0000004

直接輸出IFS是看不到的,把它轉化為二進制就可以看到了,"040"是空格,"011"是Tab,"012"是換行符"\n"。最后一個?012?是因為?echo?默認是會換行的

將其ASSII碼用十六進制打印出來:echo -n "$IFS"|xxd -g 1|awk -F":" '{print $2}'|awk -F" " '{print $1, $2, $3}'????輸出結果:20 09 0a????https://blog.csdn.net/whuslei/article/details/7187639

expr?:?命令對算術表達式求值??如:c=`expr?$a +?$b`

0?表示標準輸入

1?表示stdout標準輸出

2?表示stderr標準錯誤

&?表示等同于的意思,2>&1,表示2的輸出重定向等同于1

>?:將執行結果輸出到文件、設備上

> /dev/null:不可回收垃圾箱??,命令等同于1>/dev/null

???????????????????????Example: ./yunNanAlertTransferTest.sh?1>/dev/null?2>yunNanAlertTransferTest.log?&

>>:將執行結果追加到文件、設備上

<:從文件、設備、輸入點讀入內容

<<:從文件、設備、輸入點追加讀入內容

|:一個命令的輸出傳遞給另一個命令當做輸入

test命令,等價于[??]:內置test命令常用操作符號,將表達式寫在[]中,?如:[ expression ]#注意:expression首尾都有個空格。表達式結果為真,則test返回值為0,否則為非0?

==:兩個值的比較,如A1是否與A2相等,真:返回0,非:返回非0?[ string1 == sting2 ]

!=:兩個值的比較,如A1是否與A2不相等。??注:[ string1?]——string1是否是個空串。

=~:用于匹配或側表達式,即左側是否包含右側。if [[ $1 =~ stop || $1 =~ 'status' ]];??[]?這種結構不支持該操作。

XXX():表示這是一個函數

{ command1;command2;command3;?}:表示這個主體中的內容是個執行體,這個執行體不開子進程,在當前腳本進程中按序執行。開關與結尾的空格,最后一個命令必須有“;”

./:表示當前目錄——fork調用,在當前父進程中新起一個子進程執行

../:??表示當前目錄的上級目錄

\:用作轉義字符,或稱逃脫字符,echo要讓轉義字符發生作用,就要使用-e選項,且轉義字符要使用雙引號?。另一作用,反斜杠用于一行的最后一個字符時,把行尾的反斜杠作為續行,這種結構在分幾行輸入長命令時經常使用。

'':單引號——表示純情字符串;引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;引號字串中不能出現單引號(對單引號使用轉義符后也不行)。

????????????????????? 單引號將剝奪其中的所有字符的特殊含義,阻止對所有字符的轉義, 將所有的字符看做其字面的意思。

"":雙引號——表示純情字符串或變量的值。如果變量需多行呈現,需要雙引號,否則單行呈現。見下圖示。雙引號里可以有變量,雙引號里可以出現轉義字符。?

??????????????????????雙引號會處理字符串中的'$'(參數替換),'``' or '()'(命令替換),'\' 轉義字符 和算數等。

?????兩者基本上沒有什么區別,除非在內容中遇到了參數替換符$和命令替換符`(我不是單引號)。

sync:刷新內存緩存

exit:Shell內置命令,用來退出當前?Shell進程,并返回一個退出狀態;使用$?可以接收這個退出狀態(0~255?之間的整數,其中只有?0?表示成功,其它值都表示失敗)????注意,exit?表示退出當前?Shell?進程,我們必須在新進程中運行test.sh,否則當前?Shell?會話(終端窗口)會被關閉,我們就無法看到輸出結果了。為了腳本執行完不會退出終端,腳本的執行需要使用?fork?方式。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535406.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535406.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535406.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Nginx的11個執行流程

1 Nginx簡介 Web服務器市場份額 Nginx [engine x] 最初由 Lgor Sysoev 編寫。根據 Netcraft 的數據&#xff0c;到2020年9月&#xff0c;Nginx 服務或代理了25.76&#xff05;站點&#xff0c;市場份額占到了約34.03&#xff05;。 Nginx 被廣泛用作&#xff1a; HTTP服務器…

Nginx的執行階段詳解

在了解nginx的執行階段前&#xff0c;先看一個例子 對echo不熟悉的&#xff0c;可以先看文章Nginx調試必備了解下echo擴展 回到上面這個例子&#xff0c;在server塊中配置這樣的location&#xff0c;你覺得輸出是什么樣子&#xff1f; 按照正常的邏輯&#xff0c;輸出應該是32 …

Docker掛了,數據如何找回

docker在實際使用中&#xff0c;讓運維人員詬病的&#xff0c;除了安全問題外&#xff0c;大概就是數據的問題了 很多人在初用docker的時候&#xff0c;很多時候都忘記或不知道docker中需要保留的數據需要掛載到宿主機文件夾到容器內部對應目錄&#xff08;當然除了掛載宿主機目…

TCP總結

TCP這些東西&#xff0c;基本每個程序猿都或多或少是掌握的了。雖然感覺在實際開發中沒有什么用武之處&#xff0c;但&#xff0c;面試他要問啊 而最近大家伙過完年&#xff0c;也都在準備春招&#xff0c;我也一樣。閱讀了一些okHttp源碼之后&#xff0c;又屁顛屁顛地跑回來重…

Shell 中各種括號的作用

一、小括號&#xff0c;圓括號&#xff08;&#xff09; 1、單小括號 () ①命令組。括號中的命令將會新開一個子shell順序執行&#xff0c;所以括號中的變量不能夠被腳本余下的部分使用。括號中多個命令之間用分號隔開&#xff0c;最后一個命令可以沒有分號&#xff0c;各命令和…

linux基線核查腳本

#!/bin/bash #version 2.0cat <<EOF ************************************************************************************* ***** linux基線檢查腳本 ***** ************************************************************************************* *…

LDAP命令介紹---dsreplication

可以使用此實用程序來配置服務器之間的復制, 以使服務器數據保持同步。要正確進行復制, 必須先使用 enable 子命令啟用復制, 然后再使用 initialize 子命令將一個服務器的內容初始化為另一個服務器的內容用法: dsreplication {子命令} {選項}可用子命令:disable對指定服務器中…

LDAP命令介紹---dsconfig

此實用程序可用于定義目錄服務器的基本配置 用法: dsconfig {子命令} {選項} 獲取子命令用法列表: --help-distribution 顯示與 分發 相關的子命令 --help-general-configuration 顯示與 一般配置 相關的子命令 --help-integration 顯示與 集成 相關的子命令 --…

LDAP命令介紹---dsconfig子命令----help-distribution顯示與分發相關的子命令

此實用程序可用于定義目錄服務器的基本配置用法: dsconfig {子命令} {選項}可用子命令:create-distribution-algorithm創建分發算法create-distribution-partition創建分發分區create-workflow-element --type distribution創建分發工作流元素create-global-index創建全局索引…

LDAP命令介紹---ldappasswordmodify口令修改操作

此實用程序可用于在目錄服務器中執行 LDAP 口令修改操作用法: ldappasswordmodify {選項}其中 {選項} 包括:-a, --authzID {authzID}應更改口令的用戶條目的授權 ID -A, --provideDNForAuthzID將綁定 DN 用作口令修改操作的授權 ID -n, --newPassword {newPassword}為目標用戶…

LDAP命令介紹---dstune

此實用程序可用于幫助您優化 OUD 目錄服務器。 您可以選擇自動或基于其他標準 (例如, 內存限制或服務器將包含的數據) 優化服務器用法: dstune {子命令} {選項}可用子命令:data-based使用描述目錄服務器將包含的數據的信息優化服務器。使用 --ldifFile 可基于 LDIF 文件的內容…

LDAP命令介紹---dsreplication--initialize

initialize 將目標服務器中指定基礎 DN 下的數據內容初始化為源服務器的內容。要正確進行復制, 在啟用復制后必須執行該操作 (也可以使用 initialize-all 達到該目的) initialize-all 對于正在復制其內容的所有服務器, 將它們指定基礎 DN 下的數據內容初始化為指定…

LDAP命令介紹---dsreplication--enable:DISABLE

enable 用法: dsreplication enable {選項} 更新服務器的配置以復制指定基礎 DN 下的數據。如果某個指定的服務器正在復制其他服務器中基礎 DN 下的數據, 執行此子命令將會更新所有服務器的配置 (因此, 對于每個添加到復制拓撲中的服務器, 將都能執行一次命令行)全局選項:請參…

LDAP命令介紹---import-ldif

[oracleoud bin]$ ./import-ldif --help 此實用程序可用于將 LDIF 數據導入目錄服務器后端用法: import-ldif {選項}其中 {選項} 包括:-l, --ldifFile {ldifFile}要導入的 LDIF 文件的路徑 -A, --templateFile {templateFile}用于生成導入數據的 MakeLDIF 模板的路徑 -a, --ap…

LDAP命令介紹---verify-index--驗證索引

[oraclelocalhost bin]$ ./verify-index -b "DCCOM" telephoneNumber 在解析命令行參數時出現錯誤: 參數 "telephoneNumber" 沒有以一個或兩個破折號開頭, 并且不允許未命名的結尾參數 此實用程序可用于確保基于 Berkeley DB Java Edition 的后端中的索引…

LDAP----manage-account

[oraclelocalhost bin]$ ./manage-account -D "cndirectory manager" -j pwd-file get-all \ > > --targetDN uidkvaughan,ouPeople,dcexample,dccom 在解析命令行參數時出現錯誤: 無法接受為參數 -j 提供的值 "pwd-file": 為參數 bindpwfile 指定…

LDAP組的概念以及命令

Oracle統一目錄支持組&#xff0c;組是作為單個對象管理的條目集合。通常&#xff0c;目錄管理員配置打印機組、軟件應用程序組、員工組等。在為一組用戶分配特殊訪問權限時&#xff0c;組尤其有用。例如&#xff0c;您可以配置一組訪問管理器&#xff0c;并分配權限&#xff0…

oracle中修改process

可以用如下命令查看數據庫連接的消耗情況 select b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b where a.ADDR b.PADDR and b.USERNAME is not null group by b.MACHINE, b.PROGRAM, b.USERNAME order by count(*) desc 在 oracle中&…

V$LICENSE表結構

V$LICENSE V$LICENSE 顯示有關許可限制的信息。 列名 數據類型 描述 SESSIONS_MAX NUMBER 實例允許的最大并發用戶會話數 SESSIONS_WARNING NUMBER 實例的并發用戶會話的警告限制 SESSIONS_CURRENT NUMBER 當前并發用戶會話數 SESSIONS_HIGHWATER NUMBER 自實…

升級ssl和ssh

#/bin/bash#需要手動修改的變量 version"ssh_8.6p1" #定義版本號 soft_dir$(cd "$(dirname "$0")"; pwd) # 上傳安裝包的目錄 ssl_media"openssl-1.1.1k.tar.gz" #ssl軟件包名 ssh_media"openssh-8.6p1.tar.gz" # ssh軟件…