Bash中的特殊字元(上)

2021-06-26 08:51:41 字數 3922 閱讀 2616

無需登入直接進入系統

系統使用者名稱tc,密碼為空。即提示輸使用者名稱時輸入tc然後在提示輸入密碼時直接敲回車即可

行首以 #(#!是個例外)開頭的是注釋。

當然,在echo中轉義的 # 是不能作為注釋的:

tc@box~$ vim test.sh
輸入如下**,並儲存。(中文為注釋,無需要輸入)

#!/bin/bash

echo

"the # here dose not begin a comment."

echo

'the # here dose not begin a comment.'

echo the \# here dose not begin a comment.

echo the # 這裡開始乙個注釋

echo

$# 引數替換,不是乙個注釋

echo $(( 2

#101011 )) # 數制轉換,不是乙個注釋

# 感謝

執行指令碼,檢視輸出

tc@box~$ bash test.sh
使用分號(;)可以在同一行上寫兩個或兩個以上的命令。

tc@box~$ vim test2.sh
輸入如下**,並儲存。

#!/bin/bash

echo hello; echo there

filename=ttt.sh

if [ -r "$filename" ]; then

# 注意: "if"和"then"需要分隔

echo

"file $filename exists."; cp $filename

$filename.bak

else

echo

"file $filename not found."; touch $filename

fi; echo

"file test complete."

執行指令碼

tc@box~$ bash test2.sh
檢視結果

tc@box~$ ls
使用雙分號(;;)可以終止case選項。

tc@box~$ vim test3.sh
輸入如下**,並儲存。

#!/bin/bash

varname=b

case

"$varname"

in [a-z]) echo

"abc";;

[0-9]) echo

"123";;

esac

執行指令碼,檢視輸出

tc@box~$ bash test3.sh

abctc@box~$

bash 中的 source 命令用於在當前 bash 環境下讀取並執行 filename.sh 中的命令。

tc@box~$ source test.sh

hello

world

tc@box~$ . test.sh

hello

world

tc@box~$

"string" 將會阻止(解釋)string中大部分特殊的字元。後面的實驗會詳細說明。

'string' 將會阻止string中所有特殊字元的解釋,這是一種比使用"更強烈的形式。後面的實驗會詳細說明。

檔名路徑分隔符。分隔檔名不同的部分(如/home/bozo/projects/makefile)。也可以用來作為除法算術操作符。

一種對單字元的引用機制。\x 將會「轉義」字元x。這等價於"x",也等價於'x'。\ 通常用來轉義雙引號(")和單引號('),這樣雙引號和單引號就不會被解釋成特殊含義了。

command結構可以將命令的輸出賦值到乙個變數中去。在後邊的後置引用(backquotes)或後置標記(backticks)中也會講解。

反引號中的命令會優先執行,如:

tc@box~$ cp `mkdir back` test.sh back

tc@box~$ ls

先建立了 back 目錄,然後複製 test.sh 到 back 目錄

等價於「nop」(no op,乙個什麼也不幹的命令)。也可以被認為與shell的內建命令true作用相同。「:」命令是乙個bash的內建命令,它的退出碼(exit status)是(0)。

如:

#!/bin/bash

while :

doecho

"endless loop"

done

等價於

#!/bin/bash

while

true

doecho

"endless loop"

done

可以在 if/then 中作佔位符:

#!/bin/bash

condition=5

if condition>0

then : # 什麼都不做,引出分支

else

echo

"$condition"

fi

在與》重定向操作符結合使用時,將會把乙個檔案清空,但是並不會修改這個檔案的許可權。如果之前這個檔案並不存在,那麼就建立這個檔案。

tc@box~$ 

: > test.sh # 檔案「test.sh」現在被清空了

# 與 cat /dev/null > test.sh 的作用相同

# 然而,這並不會產生乙個新的程序, 因為「:」是乙個內建命令

在與》重定向操作符結合使用時,將不會對預先存在的目標檔案(: >> target_file)產生任何影響。如果這個檔案之前並不存在,那麼就建立它。

也可能用來作為注釋行,但不推薦這麼做。使用 # 來注釋的話,將關閉剩餘行的錯誤檢查,所以可以在注釋行中寫任何東西。然而,使用 : 的話將不會這樣。如:

tc@box~$ : this is a comment that generates an error, ( if [ $x -eq 3] )
「:」還用來在 /etc/passwd 和 $path 變數中做分隔符,如:

tc@box~$ echo $path

/usr/local/bin:/bin:/usr/bin:/usr/x11r6/bin:/sbin:/usr/sbin:/usr/games

tc@box~$

在乙個雙括號結構中,? 就是c語言的三元操作符,如:

tc@box~$ vim test.sh
輸入如下**,並儲存:

#!/bin/bash

a=10

(( t=a<50?8:9 ))

echo

$t

執行測試

tc@box~$ bash test.sh

8tc@box~$

前面已經用到了

tc@box~$ vim test.sh
#!/bin/bash

var1=5

var2=23skidoo

echo

$var1

# 5echo

$var2

# 23skidoo

執行測試

tc@box~$ bash test.sh
其他作用在後面的實驗講解

Bash中的特殊字元

行首以 開頭 除 之外 的是注釋。是用於指定當前指令碼的直譯器,我們這裡為bash,且應該指明完整路徑,所以為 bin bash 當然,在echo中轉義的 是不能作為注釋的 vim test.sh輸入如下 並儲存。中文為注釋,無需要輸入 bin bash echo the here dose not...

Bash常用特殊字元

bash 常用特殊字元 萬用字元,代表乙個或多個字元或數字 萬用字元,代表乙個字母 批註說明 轉義符號 分隔兩個管道命令的界定 連續性命令的界定,在一行輸入多條命令 使用者家目錄 變數前需要加的變數取代值 將指令移動到後台執行 邏輯運算子非 路徑分隔符 輸出重導向,分別是取代 和 累加 單引號,沒有...

Bash 特殊字元 下

test.sh filename 重定向 test.sh 的輸出到檔案 filename 中。如果 filename 存在的話,那麼將會被覆蓋。test.sh filename 重定向 test.sh 的 stdout 標準輸出 和 stderr 標準錯誤 到 filename 中。test.sh ...