bash-shell中使用的特殊字符总结
文章目錄
- 特殊字符
- `#`
- `;`
- `;;`
- `.`
- `""`
- `''`
- `,`
- `\`
- `/`
- ` ` `
- `:`
- `!`
- `*`
- `?`
- `$`
- `()`
- `{xxx,yyy,zzz,...}`
- {}
- `{} \;`
- `[]`
- `[[]]`
- `(())`
- `> &> >> < <>`
- `<<、<<<`
- `<、>`
- `\<、\>`
- `|`
- `>|`
- `||`
- `&`
- `&&`
- `-`
- `=`
- `+`
- `%`
- `~`
- `~+`
- `~-`
- `^`
特殊字符
在<<shell熱身>>大家對shell算是有個初步的了解,初步連接之后肯定想知道,這個工具怎樣用,帶著這些疑問,我們首先向探索其他語言一樣,探索一下shell中的特殊字符以及其含義。
#
當然注釋也可以在一個命令行的后面,但是命令行不能在注釋的后面
echo "后面會有一行注釋" # 注釋的#與前面的語句要有空白注釋可以不用定格寫
# 這樣也能寫注釋當然轉義之后的#是不能作為注釋的,標準的引用和轉義字符("'\'") 等可以用來轉義#
;
命令分隔符,可以在同一行上寫兩個或多個命令。
echo "這是一個命令"; ls ; pwd;;
終止case選項
#! /bin/bash # $1 是輸入給腳本的參數,如 bash case.sh 1 或 ./case.sh 1 case $1 in 1) echo "\$1 = 1" ;; 2) echo "\$1 = 2" ;; esac.
等價與source命令,是bash的一個內建命令,擋在腳本中使用這個命令加載一個腳本文件
點作為文件名的一部分,如果放在文件開頭的話,那么將隱藏這個文件,并且使用ls命令也無法查看這個文件,需要通過ls -a命令才能顯示隱藏文件
如果作為目錄的話,一個單獨的點,表示當前目錄,兩個點表示上一層目錄
用于匹配的時候,正則中.可以匹配任何的單個字符
""
雙引號會阻止 “string”, string中的大部分特殊字符
''
單引號,會阻止'string'中的所有特殊字符
,
逗號操作符. 逗號操作符鏈接了一系列的算術操作. 雖然里邊所有的內容都被運行了,但只有最后一項被返回.
let "t2 = ((a = 9, 15 /3))" # Set "a=9" and "t2 = 15 / 3"\
轉義字符,輸出特殊字符時需要使用轉義字符才能將特殊字符原樣輸出
echo "\" 打印雙引號 "/
文件路徑分隔符
`
命令替換
:
- 空命令,相當于執行NOP,總是返回成功,與bash的內建命令true相同,:是一個bash的內建命令,退出碼(exit status)是true(0)
- 占位符
if/then中的占位符:
if condition then : 什么都不做,引出分支 else tack-some-action fi在一個二元命令中提供一個占位符
: ${username=`whoami`} # ${username=`whoami`} 如果沒有開頭的 ":"的話,將會給出一個錯誤,除非"username"是一個命令或者內建命令-
使用參數替換來評估字符串變量
如果一個或者多個必要的環境變量沒有被設置的話,就打印錯誤信息
char_cap.sh
#!/bin/bash# 檢查一些系統環境變量. # 這是一種可以做一些預防性保護措施的好習慣. # 比如, 如果$USER(用戶在控制臺上中的名字)沒有被設置的話, #+ 那么系統就會不認你. : ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL?}echoecho "Name of the machine is $HOSTNAME."echo "You are $USER."echo "Your home directory is $HOME."echo "Your mail INBOX is located in $MAIL."echoecho "If you are reading this message,"echo "critical environmental variables have been set."echo- 創建空文件
與重定向符>結合使用使用時,將會把一個文件清空,但是并不會修改這個文件的權限,如果之前這個文件并不存在,那么就創建這個文件
: > test.txt # 文件test.txt如果存在現在就被清空了,如果不存在就會被創建 # 這個命令與cat /dev/null > test.txt效果是一樣的,但是實現過程不一樣,應為后者需要創建一個進程來實現文件的創建或者清空,但是前者是bash的內建命令與重定向操作符>>結合使用,將不會對預先存在的目標文件產生任何影響,如果這個文件之前并不存在,那么就創建它
當然:還可以用來做變量中的分隔符
注意:以上操作的文件只使用于正規的文件,而不適用于管道,符號連接,和某些特殊文件。
!
嘆號,可以翻轉測試操作符表達的意義,比如修改等號=為不等!=,還可以反轉命令的退出碼的結果,!操作符是Bash的關鍵字。
*
通配符,* 可以用來做文件名的匹配,這個東西也有個專有名詞"通配符",含義就是可以用來匹配目錄下的任何文件名。
也可以用與正則表達式中,用來表示匹配任一個數(包含0)的字符。
bash:/work/linux-sys/bash/2.基本/src$ echo * case.sh char_cap.sh escape_character.sh multi_commond.sh testfile當*作為算術運算符時,指進行乘法的運算,如果要進行求冪的運算,需要使用**
?
測試操作符。在一個特定的表達式中,?用來測試一個條件的結果
在一個雙括號結構中,?就是C語言的三元操作符。
在參數替換表達式中,?用來測試一個變量是否被set了
通配符,?在通配中,用來做匹配的單個字符的"通配符",在正則表達式中也是用來表示一個字符
$
- 變量替換--引用變量的內容,在一個變量前面加上$用來引用這個變量的值
- 行結束符
在正則表達式中$表示行結束符
- ${}
參數替換
- $*, $@
位置參數
$?
退出狀態嗎變量,$?變量保存了一個命令,一個函數,或者是腳本本身的退出狀態碼
$$
進程ID變量,這個$$變量保存了它在腳本的進程ID
()
命令組,在括號中的命令列表,將會作為一個子shell來運行。在括號中的變量,由于是在子shell中,所以對于腳本上下的部分是不可用的
{xxx,yyy,zzz,...}
大括號擴展.
cat {file1,file2,file3} > combined_file # 把file1, file2, file3連接在一起, 并且重定向到combined_file中. cp file22.{txt,backup} # 拷貝"file22.txt"到"file22.backup"中注意:在大括號中, 不允許有空白, 除非這個空白被引用或轉義
{}
代碼塊,即稱為內部組,這個結構實時上創建了一個匿名函數,但是與標準函數不同的是在這個匿名函數中創建的變量對于其他部分的代碼來說是可見的。
#!/bin/bash # rpm-check.sh# 這個腳本的目的是為了描述, 列表, 和確定是否可以安裝一個rpm包. # 在一個文件中保存輸出. # # 這個腳本使用一個代碼塊來展示.SUCCESS=0 E_NOARGS=65if [ -z "$1" ] then echo "Usage: `basename $0` rpm-file" exit $E_NOARGS fi{echoecho "Archive Description:"# 查詢說明.echoecho "Archive Listing:"# 查詢列表.echoif [ "$?" -eq $SUCCESS ]thenecho "$1 can be installed."elseecho "$1 cannot be installed."fiecho} > "$1.test" # 把代碼塊中的所有輸出都重定向到文件中.echo "Results of rpm test in file $1.test"# 查看rpm的man頁來查看rpm的選項.exit 0{} \;
路徑名,配合find等使用,
# 在當前目錄下,查找后綴為sh的文件,并執行chmod u+x對找到的文件加上可執行權限 find . -name '*.sh' -exec chmod u+x {} \;[]
- 條件測試,條件測試表達式放在[]中,該命令是shell內建命令的一部分,并不是/usr/bin/test中的外部命令的一個鏈接。
- 數組元素
- 字符范圍
用于正則表達式的一部分,方括號描述一個匹配的字符范圍
[[]]
測試,測試表達式放在[[]](shell關鍵字)
(())
整數擴展
擴展計算在(())中的整數表達式
> &> >> < <>
重定向
<<、<<<
用在here document中的重定向
<、>
大小比較
\<、\>
正則表達式中單詞的邊界
|
管道
>|
強制重定向,將覆蓋一個現存的文件
||
條件表達式中,或邏輯操作
&
后臺運行
&&
與-邏輯操作
-
- 選項前綴,所有的命令內,如果向使用選項參數的話,其那邊都要加上"-"
- 用于重定向 stdin 或 stdout [破折號, 即-].
- 先前的工作目錄,使用cd -將回到先前的工作目錄
- 減號操作符
=
等號,賦值操作,也可以用來做字符串比較等價于==
if [ "$a" = "$b" ]+
加號。加法算術操作,也可以作為一種正則表達式的操作
作為選項時,某些命令使用+來表示打開特定的選型,使用-來標示禁用這些特定的選項
%
取模,一次除法的余數,算術操作,也可以是一種模式匹配的操作
~
代表home目錄
~+
當前工作目錄,相當于$PWD的內建命令
~-
先前的工作目錄,相當于$OLDPWD的內部變量
^
行首,在正則表達式中^代表定位到文本行的行首
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的bash-shell中使用的特殊字符总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 作者:孙忠富(1957-),男,中国农业
- 下一篇: 作者:朱扬勇(1963-),男,博士,复