Linux-shell學習筆記1

一、檢查 /etc/shells 這個文件能夠獲得有多少可用的shell,通常有一下幾個:shell

  • /bin/sh (已經被 /bin/bash 所取代)
  • /bin/bash (就是 Linux 默認的 shell)
  • /bin/ksh (Kornshell 由 AT&T Bell lab. 發展出來的,兼容於 bash)
  • /bin/tcsh (整合 C Shell ,提供更多的功能)
  • /bin/csh (已經被 /bin/tcsh 所取代)
  • /bin/zsh (基於 ksh 發展出來的,功能更強大的 shell)

Linux 默認就是使用 bash 。數組

爲何咱們系統上合法的 shell 要寫入 /etc/shells 這個文件? 緩存

由於系統某些服務在運行過程當中,會去檢查使用者可以使用的 shells ,而這些 shell 的查詢就是經過 /etc/shells 這個文件。bash

當登錄的時候,系統就會分配個 shell 來工做。 而這個登錄取得的 shell 記錄在 /etc/passwd 這個文件內。測試

二、~/.bash_history 記錄的是前一次登錄之前所運行過的命令, 而至於這一次登錄所運行的命令都被緩存在內存中,當你成功的註銷系統後,該命令記憶纔會記錄到 .bash_history 當中。spa

三、命令行

  • [Tab] 接在一串命令的第一個字的後面,則爲命令補全;
  • [Tab] 接在一串命令的第二個字之後時,則爲『文件補齊』!

四、命令別名配置功能: (alias)blog

命令行輸入 alias 就能夠知道目前的命令別名有哪些。繼承

能夠直接下達命令來配置別名:內存

alias lm='ls -al'

五、除了完整的字符串以外, bash 還支持許多的通配符來幫助用戶查詢與命令下達。

舉例來講,想要知道 /usr/bin 底下有多少以 X 爲開頭的文件,可使用:『 ls -l /usr/bin/X* 』

六、怎麼知道某個命令是來自於外部命令(指的是其餘非 bash 所提供的命令) 或是內建在 bash 當中?

利用 type 這個命令來觀察便可, type 也能夠用來做爲相似which命令的用途:找命令

七、命令太長時能夠用 \[Enter]  使命令換行繼續輸入。

八、下達 ls 這個命令時,系統就是透過 PATH 這個變量裏面的內容所記錄的路徑順序來搜尋命令。若是在搜尋完 PATH 變量內的路徑還找不到 ls 這個命令, 會在屏幕上顯示『 command not found 』的錯誤信息。

九、爲了區別與自定義變量的不一樣,環境變量一般以大寫字符來表示。

十、能夠利用 echo 這個命令來取用變量。變量在被取用時,前面必需要加上$

十一、用『等號(=)』鏈接變量與他的內容能夠配置或修改某個變量

 

十二、

  • 變量與變量內容以一個等號『=』來連結,以下所示:『myname=VBird』
  • 等號兩邊不能直接接空格符,以下所示爲錯誤: 『myname = VBird』或『myname=VBird Tsai』
  • 變量名稱只能是英文字母與數字,可是開頭字符不能是數字,以下爲錯誤: 『2myname=VBird』
  • 變量內容如有空格符可以使用雙引號『"』或單引號『'』將變量內容結合起來,但可用跳脫字符『 \ 』將特殊符號(如 [Enter], $, \, 空格符, '等)變成通常字符;
      • 雙引號內的特殊字符如 $ 等,能夠保有本來的特性,以下所示:
        『var="lang is $LANG"』則『echo $var』可得『lang is en_US』
      • 單引號內的特殊字符則僅爲通常字符 (純文本),以下所示:
        『var='lang is $LANG'』則『echo $var』可得『lang is $LANG』
  • 在一串命令中,還須要藉由其餘的命令提供的信息,能夠使用反單引號『`命令`』或 『$(命令)』。 例如想要取得核心版本的配置:
    『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』
  • 若該變量爲擴增變量內容時,則可用 "$變量名稱" 或 ${變量} 累加內容,以下所示:
    『PATH="$PATH":/home/bin』
  • 若該變量須要在其餘子程序運行,則須要以 export 來使變量變成環境變量:
    『export PATH』
  • 一般大寫字符爲系統默認變量,自行配置變量可使用小寫字符,方便判斷 (非強制規定) ;
  • 取消變量的方法爲使用 unset :『unset 變量名稱』例如取消 myname 的配置:『unset myname』

1三、在一串命令中,在 ` 以內的命令將會被先運行,而其運行出來的結果將作爲外部的輸入信息

1四、用env 與 export 能夠查看該shell環境下全部的環境變量。

1五、set 除了環境變量以外, 還會將其餘在 bash 內的變量統統顯示出來。

1六、變量「?」表明上一個運行的命令所回傳的值。

當咱們運行某些命令時, 這些命令都會回傳一個運行後的代碼。通常來講,若是成功的運行該命令, 則會回傳一個 0 值,若是運行過程發生錯誤,就會回傳『錯誤代碼』

1七、export: 自定義變量轉成環境變量。由於子程序僅會繼承父程序的環境變量, 子程序不會繼承父程序的自定義變量。

那如何將環境變量轉成自定義變量呢?可使用declare。

1八、變量的有效範圍:咱們在上頭的export命令說明中,就提到了這個概念了。若是在跑程序的時候,有父程序與子程序的不一樣程序關係時, 則『變量』能否被引用與 export 有關。被 export 後的變量,咱們能夠稱他爲『環境變量』! 環境變量能夠被子程序所引用,可是其餘的自定義變量內容就不會存在於子程序中。

1九、要讀取來自鍵盤輸入的變量,使用 read 這個命令

read [-pt] variable
選項與參數: -p :後面能夠接提示字符! -t :後面能夠接等待的『秒數!』這個比較有趣~不會一直等待使用者啦!

20、declare 或 typeset 是同樣的功能,就是在『宣告變量的類型』。若是使用 declare 後面並無接任何參數,那麼 bash 就會主動的將全部的變量名稱與內容統統叫出來,就好像使用 set 同樣啦!

declare [-aixr] variable
選項與參數: -a :將後面名爲 variable 的變量定義成爲數組 (array) 類型 -i :將後面名爲 variable 的變量定義成爲整數數字 (integer) 類型 -x :用法與 export 同樣,就是將後面的 variable 變成環境變量; -r :將變量配置成爲 readonly 類型,該變量不可被更改內容,也不能 unset 範例一:讓變量 sum 進行 100+300+50 的加總結果 [root@www ~]# sum=100+300+50 [root@www ~]# echo $sum 100+300+50 <==咦!怎麼沒有幫我計算加總?由於這是文字型態的變量屬性啊! [root@www ~]# declare -i sum=100+300+50 [root@www ~]# echo $sum 450 

2一、

  • 變量類型默認爲『字符串』,因此若不指定變量類型,則 1+2 爲一個『字符串』而不是『計算式』。 因此上述第一個運行的結果纔會出現那個狀況的;
  • bash 環境中的數值運算,默認最多僅能到達整數形態,因此 1/3 結果是 0;

2二、若是須要非字符串類型的變量,那就得要進行變量的宣告才行

2三、

將 sum 變成環境變量
[root@www ~]# declare -x sum
讓 sum 變成非環境變量的自定義變量吧!
[root@www ~]# declare +x sum <== 將 - 變成 + 能夠進行『取消』動做

2四、數組 (array) 變量類型

範例:配置上面提到的 var[1] ~ var[3] 的變量。
[root@www ~]# var[1]="small min" [root@www ~]# var[2]="big min" [root@www ~]# var[3]="nice min" [root@www ~]# echo "${var[1]}, ${var[2]}, ${var[3]}" small min, big min, nice min

2五、變量內容的刪除:#和## 從前面開始刪除, %和%%從後面開始刪除

  • # :符合取代文字的『最短的』那一個;
  • ##:符合取代文字的『最長的』那一個;

2六、

${變量/舊字符串/新字符串}

${變量//舊字符串/新字符串}

若變量內容符合『舊字符串』則『第一個舊字符串會被新字符串取代』

若變量內容符合『舊字符串』則『所有的舊字符串會被新字符串取代』

 

 

 

2七、在某些時刻咱們經常須要『判斷』某個變量是否存在,若變量存在則使用既有的配置,若變量不存在則給予一個經常使用的配置。 

new_var=${old_var-content}

2八、 

變量配置方式 str 沒有配置 str 爲空字符串 str 已配置非爲空字符串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr
var=expr
str 不變
var=
str 不變
var=$str
var=${str:=expr} str=expr
var=expr
str=expr
var=expr
str 不變
var=$str
var=${str?expr} expr 輸出至 stderr var= var=$str
var=${str:?expr} expr 輸出至 stderr expr 輸出至 stderr var=$str

這個減號的測試並不會影響到舊變量的內容。 若是你想要將舊變量內容也一塊兒替換掉的話,那麼就使用等號 (=) 吧!

2九、history查看歷史命令,!number運行響應序號的命令,!!運行上一個命令。

相關文章
相關標籤/搜索