鳥哥的Linux私房菜基礎篇 第十章認識和學習bash這個shell

u201017971發表於2018-09-26

1 認識bash這個shell

使用者通過shell來跟kernel進行溝通,但是系統有很多工具提供了shell的功能,其中bash就是其中之一。
bash shell的功能:

-命令編修能力 history

  • tab,具有檔名補全,命令補全的功能。
  • 雙擊tab,有提示的作用。
  • 命令別名功能:alias
  • 程式化指令碼
  • 萬用字元 *

內建命令:
查詢是否為內建命令:type command
如:type cd

[ctrl]+u/[ctrl]+k 向前向後刪除
[ctrl]+a/[ctrl]+e 游標移動到最前或最後

2 shell變數功能

  1. 變數取用和設定
    echo $var
    echo $PATH

  2. 子模組
    cd /lib/modules/uname -r/kernel
    cd /lib/modules/$(uname -r)/kernel

    myname="$var is a var" 可進行變數替換

    myname=’$var is a var’

  3. 環境變數
    [root@localhost~]$ env
    [root@localhost~] $ set 觀察所有變數

  4. 特殊符號
    $ 表示本shell的ID
    ? 上條命令執行的回傳值,為0則表示執行成功
    echo $$ 本shell的PID
    echo $?
    export var :將自定義變數轉成 環境變數

  5. read , array, declare

  • read
    $read -p "Please keyin your name: " -t 30 named
  • declare 的用法
sum=1+2+3
echo $sum

declare -i sum=1+2+3
echo $sum
  • array
var[1]='zhang'
var[2]='li'
var[3]='wang'
echo "${var[1]},${var[2]},${var[3]}"
  1. 與檔案系統及程式的限制關係:ulimit
    使用示例:
$ ulimit -f 10240
$ dd if=/dev/zero of=123 bs=1M count=20   //建立20M的檔案失敗
rm 123 
登出再次登入,就能取消掉限制

  1. 變數替換,取代與刪除
    path=path={PATH}
    $ echo ${path}
  • # 號的使用
    $ echo ${path#/local/bin:} //向右刪除頭一個
    $ echo ${path##/
    :} //刪除最長的那一個
  • %號的使用
    表示從後往前刪除
    %% 表示最長的匹配串
  • /
    ${變數/舊字串/新字串} 第一個被取代
    ${變數//舊字串/新字串} 全部被取代

3 別名與歷史命令

  1. alias, unalias
    alias h=‘history’
  2. history
    history n //最近N個
    !cmd 最近匹配到的命令
    !! 執行上一指令

4 bash shell的操作環境

  1. bash的進站資訊:/etc/issue, /etc/motd
    進站的畫面,在檔案/etc/issue中修改。
    如:
\S (terminal: \l)
Date: \d \t
Kernel \r on an \m
Welcome!

登入後獲得通知訊息,在/etc/motd中修改。
如告訴登入著固定時間會進行維護,或者某檔案不能刪除修改等。

5 資料流重定向

     file   <<,<    command   輸入,代號0
     command >>,>file  輸出,代號1
     command 2>,2>> file/screen/device  標準錯誤輸出 代號,2   
     /dev/null 垃圾桶黑洞裝置與特殊寫法
     --------------------------
     示例:
        1. 輸出
         ls / >> file 
        2. 輸入
         cat << EOF > output
			hello
			world
			EOF
	
         3. 錯誤資訊的丟棄
         sh start.sh 2>/dev/null
         2表示錯誤資訊的標號,/dev/null是一個黑洞。
         4. 將錯誤資訊也儲存到標準輸出流中:2>&1
         5.  ;, &&, ||
         連續指令, ;
         指令回傳值,$?
         cmd1 && cmd2: cmd1 正確執行完畢,再執行cmd2 ,否則cmd2不執行
         cmd1 || cmd2 : cmd1 正確執行完畢,cmd2不執行,
         如: ls /tmp/abc || mkdir /tmp/abc ,不會出現mkdir重複的錯誤。
         ls /tmp/vbirding && echo "exist" || echo "not exist" 存在輸出exist,不存在輸出not exist

6 管道命令pipe

如: ls /usr/bin | less 使用less協助檢視

  1. cut ,grep
  • cut
    cut -d’:’ -f 3[,5]
    cut -c-10
  • grep 為分析一些資訊
    cat file |grep name
    grep ‘name’ file
    grep常用引數: -v,-i ,-E
  1. 排序命令:sort,wc,uniq
  • sort
    cat file | sort
    cat file | sort -t ‘:’ -k 3 #以:號分割,根據第三列欄位排序

  • uniq
    將重複的資料,僅僅列出一個

  • wc
    wc -l 列出多少行

  1. 雙向重導向
    可以將內容列印到螢幕且將內容輸入到檔案。
    ls | tee file
  2. 字元轉換命令
  • tr: 刪除一段資訊當中的文字或者替換
    如:cat file| tr ‘[a-z]’ ‘[A-Z]’ 小寫換大寫
    tr -d ‘:’ 刪除符號
  • join
    處理兩個檔案中,有相同資料的行,連成一行
    如:
    join -t ':' /etc/passwd /etc/shadow
    -t 表示按照: 分割子串,並且對比第一列
    
    • paste
      將兩個檔案中,相同的行直接貼上到一起
  • split 分割槽命令
    檔案太大無法複製,將大檔案分割槽為小檔案。
    如:
split -b 300k /etc/services services  //將/etc/services檔案分為300k的小檔案
cat setvice*>>servicesbak 使用重定向就可以恢復
spilt -l 10 file bak  // 按行劃分,檔案的每十行一個檔案
  • xargs
    command1 | xargs command2
    將1的結果作為引數傳遞給2進行執行

  • - 號的用途
    請相信,每一個符號的存在都是極其重要以及有意義的。
    使用如下:

tar -cvf  -  /home | tar -xvf  -  -C /tmp/homeback
相當於臨時未命名變數一樣,前面指令的輸出,作為後面指令的輸入。

好了,本章的內容基本完畢。謝謝閱讀和支援

相關文章