#linux#shell中的特殊符號

# 井號(comments)

井號 出現在一行的開頭,或者位於完整指令之後,這類情況表示符號後面的是註解文字,不會被執行。

#這個井號表示註釋
echo "abc" #這個井號表示註釋

如果被用在指令中,或者引號雙引號括住的話,或者在倒斜線的後面,那他就變成一般符號,不具上述的特殊功能。

echo "abc#abc"

~ 波浪號

波浪號 代表當前登錄用戶的home目錄。

cd ~

~+ 表示當前的工作目錄,和pwd作用相同。

echo ~+

~- 表示上次的工作目錄。

echo ~-

; 分號(command seperator)

分號表示連續指令。

cd ~; ls

;; 連續分號(terminator)

連續分號 專用在case的選項,作爲結束標識。

var="1"
case $var in
    1)
    echo 1;
    ;;
    2)
    echo 2;
    ;;
    *)
    echo "default";
    ;;
esac

. 點號(dot)

1個點號表示當前目錄,2個點號表示上層目錄。

ls .
ls ..

如果文件名以點號開頭,表示該文件爲隱藏屬性。需要通過 ls -a 才能看到該文件。

正則表達式中,點號表示任意字符。

’ 單引號(single quote)

被單引號用括住的內容,將被視爲單一字串。在引號內的代表變數的$符號,沒有作用,也就是說,他被視爲一般符號處理,防止任何變量替換。

var=123
echo 'number is $var' #這裏輸出的爲$var,而不是123

” 雙引號(double quote)

被雙引號用括住的內容,將被視爲單一字串。它防止通配符擴展,但允許變量擴展。這點與單引數的處理方式不同。

var=123
echo 'number is $var' #這裏輸出的爲123

` 倒引號(backticks)

倒引號引住的內容爲命令,會作爲命令執行。類似於$()

echo `ls`
echo $(ls)

, 逗號(comma)

逗號用在運算表達式中間,用於分隔表達式。

a=1
b=2
((a++, b++))
echo $a
echo $b

/ 斜線(forward slash)

斜線在路徑表示時,代表目錄。

cd /etc/sysconfig/

通常單一的斜線表示系統根目錄。

ls /

在四則運算中,表示除法。

let "var=25/5"
echo $var #輸出5

\ 反斜槓

反斜槓放在指令前,表示取消alias作用。

\ls

反斜槓房子特殊符號前,則該特殊符號的作用消失,表示轉義

echo "\"abc\""

反斜槓放在指令的末端,表示指令鏈接下一行。

ls /etc/ \
-la

| 豎線(pipeline)

unix系統中,豎線表示管道,連接上個指令的標準輸出,作爲下個指令的標準輸入。

ls -la | wc -l

! 感嘆號(negate or reverse)

感嘆號通常表示反邏輯的作用,如:條件語句中,表示 不等於

if [ $var != 2 ]; then 
    echo "not equal"
fi

在正則表達式中,表示反邏輯。

ls a[!0-9]

: 冒號

冒號在bash中,這是一個內建指令,表示:什麼都不做,但返回值爲0

:
echo $? #返回0

? 問號

問號在文件名擴展上,表示任意單個字符,但不包括null字符。

ls a?a

* 星號

星號在文件名擴展上,表示任意多個字符,包括null字符。

ls a*

星號在運算時,代表乘法。

let "var = 3 * 4"
echo $var #12

兩個星號在運算時代表次方運算。

let "var=2**3"
echo $var #8

$ 美元符號(dollar sign)

美元符號表示變量替換。

var=3
echo $var

正則表達式中,美元符號表示行結束符。

bash {} 定義了不少用法。以下是取自線上說明

${parameter:-word}      使用默認值word來代替那些空的或者沒有複製的變量。
${parameter:=word}      使用指定值word來代替空的或者沒有複製的變量。
${parameter:?word}      如果變量爲空或者未賦值,那麼就會顯示出錯誤信息word並中止腳本的執行同時返回退出碼1${parameter:+word}
${parameterffset}
${parameterffset:length}
${!prefix*}
${#parameter}           字符串長度
${parameter#word}       從字符串的頭部開始刪除與word匹配的最小部分,然後返回剩餘部分
${parameter##word}      從字符串的頭部開始刪除與word匹配的最長部分,然後返回剩餘部分
${parameter%word}       從字符串的尾部開始刪除與word匹配的最小部分,然後返回剩餘部分
${parameter%%word}      從字符串的尾部開始刪除與word匹配的最長部分,然後返回剩餘部分
${parameter/pattern/string}
${parameter//pattern/string}

使 0, 1, 2, ..., 10, {11}, …
其中:0 1, … 表示腳本參數。

@ * 具有相同作用。
不同點是:
@ 則仍保留每個引用變量的區段概念。

$# 也是與引用變量相關的符號,表示引用變量的數量。

$? 狀態值(status variable)
表示指令的結果碼,一般來說:0表示正常,非0表示異常。

$$ 表示當前進程的pid

$- 顯示shell使用的當前選項

$! 最後一個後臺運行的進程ID

() 圓括號(指令羣組,command group)

用括號將一串連續指令括起來,這種用法對 shell 來說,稱爲指令羣組。

(cd ~ ; vcgh=`pwd` ;echo $vcgh)

指令羣組有一個特性,shell會以產生 subshell來執行這組指令。因此,在其中所定義的變數,僅作用於指令羣組本身。

除了上述的指令羣組,括號也用在 array 變數的定義上;另外也應用在其他可能需要加上escape字元才能使用的場合,如運算式。

(()) 雙圓括號

這組符號的作用與 let 指令相似,用在算數運算上,是 bash 的內建功能。所以,在執行效率上會比使用 let指令要好許多。

var=1
((++var))
echo $var #2

{} 大括號(block of code)

腳本中,大括號中夾雜着一段或幾段以分號做結尾的指令或變量,這種情況下,和指令羣組類似,但不同的是,它在當前shell執行,不會產生subshell。

{
    echo abc
}

大括號也被用在函數的功能上,廣義的講,單純只使用大括號時,作用就像是個沒有指定名稱的函數一樣。

此外,大括號還有另一種用法,如下
{xx,yy,zz,…}
這種大括號的組合,常用在字串的組合上,來看個例子
mkdir {userA,userB,userC}-{home,bin,data}
我們得到 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin,userC-data,這幾個目錄。

[] 中括號

中括號常用在流程控制中,用於括住判斷式。可理解爲指向test命令的一個軟鏈接。所以其用法可以參照test,將test位置替換爲[即可。

if [ -z $var ]; then
fi

正則表達式中,表示範圍或集合。

ls abc[1-9]

[[]] 與[] 作用類似,允許使用|| && 邏輯等符號。

var=5
if [[ $var > 4 ]]; then echo "large"; fi;

|| 雙豎線

雙豎線表示邏輯符號 or,可以鏈接多個命令。允許執行一系列命令直到有一條命令成功爲止,其後所有命令將不再被執行。

&& 雙and符號

雙and符號表示邏輯符號 and,可以連接多個命令。只有在前面所有的命令都執行成功的情況下才執行後一條命令。

echo "a" && echo "b" && echo "c"

& and符號

單一個and符號放在完整指令末端,表示後臺執行。

+ 加號(plus)

在運算表達式中,表示加法。

此外在正則表達式中,用來表示很多個的前面字符的意思。

grep '10\\+9' fileB109100910000910000931010009#這個符號在使用時,前面必須加上轉義字符。

- 減號(dash)

在運算表達式中,表示減號。

let "var=5-3"

減號表示系統指令的選項符號。

ls -la

在GNU指令中,如果單獨使用-,不加任何該加的文件名稱時,代表標準輸入的意思。只是GNU指令的共通選項。

tar xpvf - #代表從標準輸入讀取資料。

cd指令中,表示回到上次目錄。

cd -

% 百分號(modulo)

在運算表達式中,表示取模

expr 10 % 2 #輸出2

此外,也被運用在關於變量的規則表達式當中

${parameter%word}${parameter%%word} 

一個 % 表示最短的 word 匹配,兩個表示最長的 word 匹配。

= 等號(equals)

等號表示變量賦值,PATH設定。

var=3
export JAVA_HOME=/usr/local/java

== 雙等號

雙等號在條件表達式中,表示等於。

if [ $var1 == $var2 ]; ...

!= 不等於

不等於號在條件表達式中,表示不等於。

if [ $var1 != $var2 ]; ...

^ 上尖括號

正則表達式中,表示行首,在[]中,表示非。

輸出/輸入重導向

ls >> a.txt #追加操作

ls > a.txt #創建操作

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