【shell】shell基本用法

希望各位不要白piao,點個贊或者刷個評論再走,還有【禁止轉載】
*這篇文章就是講解變量在shell中是什麼樣的(我手頭的筆記比較多,只能慢慢發,如果真的有某一方面特別的需求,可以在評論中回覆,如果我有相關的資料我會優先發出來)
這篇文章不會教你如何用cd, ls, pwd 這種基本到不能再基本的shell命令。這篇文章主要寫了如下幾個方面:

文件名代換
命令代換
算術代換
轉義字符\ -> 特殊文件名的處理
單引號
雙引號 ->單引號與雙引號的區別

文件名代換

文件名代換(Globbing):* ? [] →通俗點說就是模糊匹配 通常用於模糊查詢
這些用於匹配的字符稱爲通配符(Wildcard),具體如下:
通配符
* 匹配0個或多個任意字符
? 匹配一個任意字符
[若干字符] 匹配方括號中任意一個字符的一次出現
ls /dev/ttyS* #列出/dev/下以ttyS開頭的文件名
ls ch0?.doc #列出ch0[這裏可以是任何東西].doc
ls ch0[0-2].doc#列出ch01.doc ch02.doc ch00.doc
ls ch[012] [0-9].doc#列出ch00.doc ch01.doc ch02.doc ch03.doc等等中間兩位數一個來字0,1,2另一個來自0,1,2,3,4,5,6,7,8,9

注意,Globbing所匹配的文件名是由Shell展開的,也就是說在參數還沒傳給程序之前已經展開了,比如上述ls ch0[012].doc命令,如果當前目錄下有ch00.doc和ch02.doc,則傳給ls命令的參數實際上是這兩個文件名,而不是一個匹配字符串。

命令代換

命令代換:$() 或者 用``引用起來
Shell先執行該命令,然後將輸出結果立刻代換到當前命令行中。首先我們來說一下``例如定義一個變量存放date命令的輸出:
DATE=date
echo ${DATE}

命令代換也可以用$()表示:
DATE=$(date) #這一行的命令與上面完全一樣,前期還是用這種吧,後期寫的熟練了用上面那個,因爲上面那個寫的比較快

算數代換

算術代換:$(())
用於算術計算,$(())中的Shell變量取值將轉換成整數,同樣含義的$[]等價例如: VAR=45
echo $(($VAR+3)) #結果是48
$(())中只能用±*/和()運算符,並且只能做整數運算!!!
$(())中只能用±*/和()運算符,並且只能做整數運算!!!
$(())中只能用±*/和()運算符,並且只能做整數運算!!!

按照進制對數字進行運算
$[base#n],其中base表示進制,n按照base進制解釋,後面再有運算數,按十進制解釋。
echo $[2#10+11] #2的十進制就是2,11的十進制是11,他們兩個相加就是13
echo $[8#10+11] #8的十進制是8,11的十進制是11,他們兩個相加就是19
echo $[10#10+11] #10的十進制就是10,11的十進制是11,他們兩個相加是21

轉義字符\

和C語言類似,\在Shell中被用作轉義字符,用於去除緊跟其後的單個字符特殊意義(回車除外),換句話說,緊跟其後的字符取字面值。例如:
echo $SHELL
/bin/bash
echo \$SHELL
$SHELL
echo \\
\
比如創建一個文件名爲“$ $”的文件可以這樣:
touch \$\ \$
這裏就是先把$給轉義了,然後再把空格給轉義了,最後把$再給轉義了。工作中是不可能寫這種東西了,無異於尋死,所以說大家知道就好。

還有一個字符雖然不具有特殊含義,但是要用它做文件名也很麻煩,就是-號。如果要創建一個文件名以-號開頭的文件,這樣是不行的:
touch -hello
如果輸入上面的命令會出現下面的報錯:
touch: invalid option – h
Try touch --help’ for more information.
即使加上\轉義也還是報錯:
touch \-hello
touch: invalid option – h
Try touch --help’ for more information.

因爲各種UNIX命令都把-號開頭的命令行參數當作命令的選項,而不會當作文件名。如果非要處理以-號開頭的文件名,可以有兩種辦法:
touch ./-hello
或者
touch -- -hello
\還有一種用法,在\後敲回車表示續行,Shell並不會立刻執行命令,而是把光標移到下一行,給出一個續行提示符>,等待用戶繼續輸入,最後把所有的續行接到一起當作一個命令執行。例如:
ls \
> -l
@experience:以上兩行就相當於ls -l命令的輸出,只不過一行寫不下分兩行寫了,這個是很經常用到的,比如你用shell調用java寫的job,裏面的參數特別長你不能在一行上寫吧,這時候就會用這個東西

單引號

單引號(在單引號中輸入回車 echo的時候回車會生效)
和C語言不一樣,Shell腳本中的單引號和雙引號一樣都是字符串的界定符),而不是字符的界定符。單引號用於保持引號內所有字符的字面值,即使引號內的\和回車也不例外,但是字符串中不能出現單引號。如果引號沒有配對就輸入回車,Shell會給出續行提示符,要求用戶把引號配上對。例如:
echo '$SHELL'
$SHELL
echo 'ABC\(回車)
> DE'(再按一次回車結束命令)
ABC
DE

雙引號

被雙引號用括住的內容,將被視爲單一字串。它防止通配符擴展,但允許變量擴展。這點與單引號的處理方式不同
DATE=$(date)
echo "$DATE"
echo '$DATE'
在這裏插入圖片描述
這樣就一目瞭然的知道了雙引號跟單引號的區別

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