Linux shell

]# echo $variable

  • 爲了要分辨是否爲變量,那麼 Linux 系統預設變量名稱前面會加上一個『 $ 』符號


  • 有多少的環境變量呀?使用 env 與 set 來看看:
  • 基本上,在 Linux 預設的情況中,使用{大寫的字母}來設定的變量一般爲系統內定需要的變量
  • env environment 的簡寫,所以說,這個指令主要在將目前系統中的主要變量讀出來!但是,不是說我們還可以自訂變量嗎?因此,除了 env 這個讀取環境變量的指令之外,還有一個可以將目前系統中所有的變量數據都讀出來的指令,稱爲set
  • 然而在 bash 底下的變量設定是有一定規則的,必須要來遵守才行:
  1. 變量與變量內容以等號『=』來連結;
  2. 等號兩邊不能直接接空格符;
  3. 變量名稱只能是英文字母與數字,但是數字不能是開頭字符;
  4. 若有空格符可以使用雙引號『 " 』或單引號『 ' 』來將變量內容結合起來,但須要特別留意,雙引號內的特殊字符可以保有變量特性,但是單引號內的特殊字符則僅爲一般字符;
  5. 必要時需要以跳脫字符『 \ 』來將特殊符號(如Enter, $, \, 空格符, '等)變成一般符號;
  6. 在一串指令中,還需要藉由其它的指令提供的信息,可以使用 quote 『 ` command`』;
  7. 若該變量爲擴增變量內容時,則需以雙引號及 $變量名稱如:『 "$PATH":/home』繼續累加內容;
  8. 若該變量需要在其它子程序執行,則需要以 export 來使變量可以動作,如『export PATH』;
  9. 通常大寫字符爲系統預設變量,自行設定變量可以使用小寫字符,方便判斷(純粹依照使用者興趣與嗜好);
  10. 取消變量的方法爲:『unset 變量名稱』。

    • export
      當你取得一個 bash 之後,亦即得到了一個程序了,但是若你再次的執行一次 bash ,那麼你將進入『子程序』,這個程序的概念我們在資源管理章節中再詳談,這裏您先有個概念即可。那麼由於您已經進入了該子程序,所以在父程序中的變量設定將不再繼續的存在。如您想要讓該變量內容繼續的在子程序中使用,那麼就請執行:
        export 變數
     
    !這個東西用在『引用他人的檔案或者其它程序』時,相當的重要的!尤其像我常常兩三個檔案互相引用來引用去的,如果忘記設定 export 的話,那麼不同的檔案中的相同變量值,將需要一再地重複設定才行!所以,我只要在頭一個檔案使用 export 的話,那麼後續的檔案引用時,將會把該變量內容讀進來!好用的很?而,如果僅下達 export 而沒有接變量時,那麼此時將會把所有的『環境變量』秀出來喔!也就是說,export 可以將一般自訂的變量變成環境變量
  • unset
    就是直接將該變量的內容拿掉:
      unset 變數


命名別名:

  • 只需在alias 後面加上{別名= ‘指令 參數’}
  • 如 alias rm='rm -i'
  • 如果想知道有哪些別名 用alias就可以了
  • 取消別名 unalias 別名
個人設定值:~/代表個人家目錄
~/.bash_profile:裏面定義了個人化的路徑與環境變量的名稱!不同的系統有可能存儲路徑不同
~/.bashrc:這個檔案對於個人喜好的bash設定來說,是最重要的
~/.bash_history :這個檔案的用途在於將你使用過的命令記錄下來可以通過cat查看,但是你這一次寫過的不會出現在其中,每次使用history就是調用這個檔案
檔案記錄的數據總數與HISFILE有關

~/.bash_logout :這個檔案在你註銷shell時候bash會爲你所做的事。通常與設只有清除屏幕,不過你可以將一些備份或者其他你認爲重要的的工作寫在這個檔案中


  • 由於系統預設並不主動搜尋目前目錄下的執行文件,那麼你應該如何執行『目前目錄下的執行文件』呢?很簡單呀!就是以相對路徑的觀念,由於『 .. 』是上層,而『 . 』是這一層,所以要執行這一層目錄的命令就使用『 ./command 』即可!例如你的 /usr/local/squid/bin 底下執行 squid 則可以寫成:
     
[test @tset bin]# ./squid <==以相對路徑的觀念來看!在本目錄下達的指令寫法!
 
請特別留意這方面的問題!『新手特別容易犯這個錯誤呢
  • 什麼是『重導向, redirect ?』:簡單的說,就是將你目前的所得資料轉到其它地方去就是了!例如我們常用的,將目前的屏幕輸出數據轉到檔案中去,就可以這麼寫:『ls -l / > test 』,那個大於的符號『 > 』就是將輸出結果導向到 test 這個檔案中的意思囉!這個時候:
  • 如果你執行『 ls -l / 』而已的話,屏幕會將根目錄的檔案與目錄都列出在屏幕上;
  • 但是當使用 > 導向到 test 這個檔案中時,則屏幕不會顯示任何訊息,但是會將剛剛你執行的結果輸出到 test 這個檔案中。
  • 所以囉,你只要『 vi test 』一下,就會知道 test 這個檔案中記錄了剛剛我們執行的數據結果囉!不過,這裏需要特別留意的是,當你使用 > 符號將數據由屏幕導向到檔案中時,則:
    • 該檔案(就是 test )若不存在,系統會自動的將他建立起來,但是,
    • 當這個檔案存在的時候,那麼系統就會先將這個檔案內容清空,然後再將數據寫入!
    • 也就是若以 > 輸出到一個既存盤案中,呵呵,那個檔案就會被覆蓋掉囉
      • 除了這個 > 的符號之外,在 bash 命令執行的過程中,主要有三種輸出入的狀況,分別是:
      1. 標準輸入;代碼爲 0 ;或稱爲 stdin ;使用的方式爲 <
      2. 標準輸出:代碼爲 1 ;或稱爲 stdout;使用的方式爲 1>
      3. 錯誤輸出:代碼爲 2 ;或稱爲 stderr;使用的方式爲 2>

左邊一定是指令,至於右邊則可能是裝置或者是檔案!注意了!那個 1> 與 2> 之間並沒有空格符!而相關的使用說明可以舉例如下:

[test @test test]# ls -al > list.txt
將顯示的結果輸出到 list.txt 檔案中,若該檔案以存在則予以取代!
[test @test test]# ls -al >> list.txt
將顯示的結果累加到 list.txt 檔案中,該檔案爲累加的,舊數據保留!
[test @test test]# ls -al 1> list.txt 2> list.err
將顯示的數據,正確的輸出到 list.txt 錯誤的數據輸出到 list.err
[test @test test]# ls -al 1> list.txt 2>&1
將顯示的數據,不論正確或錯誤均輸出到 list.txt 當中!
[test @test test]# ls -al 1> list.txt 2> /dev/null
將顯示的數據,正確的輸出到 list.txt 錯誤的數據則予以丟棄!
注意!錯誤與正確檔案輸出到同一個檔案中,則必須以上面的方法來寫!
不能寫成其它格式!

這個觀念相當的重要,尤其是在 /etc/crontab 當中執行的時候,如果我們已經知道錯誤的訊息爲何,又不想要讓錯誤的訊息一直填滿 root 的信箱,就必須以 2> 搭配 /dev/null 這個垃圾桶黑洞裝置,來將數據丟棄!這個相當的重要!

  • 這裏我們來說明一下命令重導向裏面幾個常用的符號與裝置:
    • < :由 < 的右邊讀入參數檔案;
    • > :將原本由屏幕輸出的正確數據輸出到 > 右邊的 file ( 文件名稱 ) 或 device ( 裝置,如 printer )去;
    • >> :將原本由屏幕輸出的正確數據輸出到 >> 右邊,與 > 不同的是,該檔案將不會被覆蓋,而新的數據將以『增加的方式』增加到該檔案的最後面;
    • 2> :將原本應該由屏幕輸出的錯誤數據輸出到 2> 的右邊去。
    • /dev/null :可以說成是黑洞裝置!

管線命令
  • ),
管線命令使用的是『 | 』這個界定符號
  • 假設我們要讀取 last 這個指令中,那個 root 登入的『次數』應該怎麼作?注意呦!我們只需要『
次數』。那麼我所進行的步驟是:
  1. 執行 last ,將所有這個月的所有人登入數據取出來;
  2. 使用 grep 將上面的輸出數據(stdout)當中的 root 擷取出來,其它的不要;
  3. 使用 wc 這個可以計算行數的指令將上一步的數據計算行數!
  • 由於 last 的輸出是一行代表一次登入,所以只要計算幾行就代表登入幾次的意思,所以囉!經由上面三個步驟,將 last 數據逐步的篩選,就可以得到我們的數據了!整個命令可以寫成如下:
     
[test @test bin]# last
[test @test bin]# last | grep root
[test @test bin]# last | grep root | wc -l
  

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