天天看點

Shell的一些注意點(逐漸補充)

1)如果要搜以AB開頭的檔案名,#find / -name "AB*",注意要有雙引号,不然會報錯。

如果搜某檔案裡,AB開頭的句子,#grep "^AB" 檔案名,如果用cat的話,是展現全文。

2)#!!:執行上一次輸入的指令

     #!$:執行上一次執行的變量,這倆個指令用向上箭頭是翻閱不出來的。

3)ctrl+z 是休眠(雖然它提示是stop,其實就是暫停),ctrl+c 是徹底down了這個任務。

 ctrl+z之後,可以使用#jobs檢視已經休眠的任務,如果要重新啟動已經被休眠的任務,就是#fg + 序号。

4) tr指令是替換指令,#cat 1.txt|tr 'a-z' 'A-Z',這個指令就是代表把1.txt 的所有小寫字母對應都換成大寫字母。

但是這個指令其實不是很智能,#cat 1.txt|tr 'james'  'bond',這樣的指令并不是單獨把james這個單詞更換成bond,而是把所有 j  a  m e s 的字母都換成 b o n d 這四個字母,但是bond 少一個,那麼就用末尾的d補上。

<a href="http://s2.51cto.com/wyfs02/M01/7F/42/wKioL1cYSGHSOcsaAABOEes1d_Q889.png" target="_blank"></a>

這是五個字母對應五個字母的替換。

<a href="http://s2.51cto.com/wyfs02/M02/7F/42/wKioL1cYSJCwm5igAAAsZNBJlSI269.png" target="_blank"></a>

這是五個字母對應四個字母的替換。總而言之,這個tr指令還不如進vim之後,用替換更舒服一些。

5)#export a=65535,這個是設定全局變量a為65535,如果使用#bash進入子shell,那麼$a是等于65535,這時候可以單獨設定a=777, 那麼在這一層的子shell裡a=777,使用#exit退出這個子shell的話,a還是等于65535 。

如果要取消對某變量的指派,#unset 變量。

6)如果ctrl+c不好用了,那就ctrl+\。

8)shell 幾種專用修飾符 :- :+ := ${variable:offset:length} 

${variable:-word} 如果variable已經被設定且非空,則代入它的值,否則代入word;

1

2

3

4

5

<code>$ fruit=peach</code>

<code>$ </code><code>echo</code> <code>${fruit:-plum}</code>

<code>peach</code>

<code>$ </code><code>echo</code> <code>${newfruit:-apple}</code>

<code>apple</code>

${variable:=word}如果variable已經被設定且非空,則代入它的值,否則代入word,并且在後面variable始終為word的值。位置參量不能用這種方式指派。

<code>$ name=</code>

<code>$ </code><code>echo</code> <code>${name:=peter}</code>

<code>peter</code>

<code>$ </code><code>echo</code> <code>$name</code>

${variable:+word} 如果變量variable已被設定且值為非空,代入word值,否則什麼也不代入,

<code>$ foo=grapes</code>

<code>$ </code><code>echo</code> <code>${foo:+pears}</code>

<code>pears</code>

<code>$ </code><code>echo</code> <code>$foo</code>

<code>grapes</code>

${variable:?word} 如果變量variable已被設定值且為非空,就代入它的值,否則輸出word并從shell中退出,如果有省略了word,就會顯示資訊:parameter null or not set.

<code>$ </code><code>echo</code> <code>${namex:?</code><code>"namex is undefined"</code><code>}</code>

<code>  </code><code>namex: namex is undefined</code>

<code> </code> 

<code>$ </code><code>echo</code> <code>${y?]</code>

<code> </code><code>y: parameter null or not </code><code>set</code>

${variable:offset} 獲得變量從variable值中位置從offset開始的子串,偏移為從0到串尾。

${variable:offset:length} 獲得variable值位置從offset開始長度為length的子串。

$var=notebook

$ echo ${var:0:4}

 note

$ echo ${var:4:4]

book

9)ctrl+s 在ssh下是鎖死螢幕,光标不會移動,不會添加内容,但滑鼠滑輪可以,需要解除的話使用ctrl+q。

10)關于su和su -的差別

切換使用者是可以使用su tom或者su - tom來實作,但是兩者有差別:

su隻是切換身份,但shell環境仍然是原使用者的shell,su -是連使用者的shell環境一起切換,切換了shell環境,PATH的環境變量才有效。

舉例子:

比如說 root使用者在/root/目錄下, su tom,切換到了tom 使用者,但是目錄仍然在/root/下。

如果使用su - tom,你可以發現目錄也切換到tom使用者的家目錄下。

這也是造成一些指令報錯:command not found的原因。

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1766126