無需登入直接進入系統
系統使用者名稱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 ...