【linux】shell基礎知識

一、shell簡介

1. 什麼是shell?

- shell就是一個解釋器,當用戶向linux內核發送命令的時候,先發送到shell,shell將命令轉化成linux內核能識別的指令,然後發送給linux內核。
- 用戶可以用Shell來啓動、掛起、停止或者編寫一些程序
- Shell還是一個功能相當強大的編程語言,易編寫,易調試,靈活性較強。
- Shell是解釋執行的腳本語言,在Shell中可以直接調用Linux系統命令。

二、shell基礎

1. 查看支持的shell

```
    cat /etc/shells
```
- shell有很多種,我們可以通過cat /etc/shells來查看有哪些shell
    - 一般我們使用/bin/bash這個shell

2.查看shell的幫助信息

命令 作用
man bash 查看bash的命令幫助
info bash 查看bash的文檔
help 命令顯示bash支持的命令
help cd 如果想看某個命令的幫助可以 help 命令

3. echo

- 輸出命令
- -e支持轉義字符
    ```
        echo hello //輸出hello
        echo hello\r\n //輸出hellorn
        echo "hello\r\n" //輸出hello\r\n
        echo -e "hello\r\nworld"
        //輸出:
        hello
        world

       
    ```
控制字符 作用
\n 換行符
\r 回車鍵
\t 製表符,也就是Tab鍵
\v 垂直製表符
\onnn 按照八進制ASCII碼錶輸出字符,其中0爲數字零,nnn是三位八進制數
\xhh 按照十六進制ASCII碼錶輸出字符,其中hh是兩位十六進制數
符號 顏色
#30m 黑色
#31 紅色
#32 綠色
#33 黃色
#34 藍色
#35 洋紅
#36 青澀
#37 白色
    echo -e "12\r\n34\t56\v78"
    //以上輸出:
    12
    34  56
            78

    echo -e "\0141"
    //以上輸出a,就是將8進制轉換成十進制數,然後對照ASCII表輸出字符

    echo -e "\x61"
    //以上輸出a,就是將十六進制轉成十進制,然後對照ASCII表輸出字符

    echo -e "\e[1;31m warning \e[0m"
    //輸出紅色的warning,顏色需要對照上面的表格
- 特別注意:輸出帶顏色的內容,格式是:
    ```
        echo -e "\e[1;顏色符號 內容 \e[0m"
    ```
    - 顏色符號對照上表,內容左右沒有空格

4. 編寫執行shell

4.1 編寫shell腳本
- 一般編寫shell腳本,在腳本最上面會聲明#!/bin/bash,代表是shell腳本執行,並且是/bin/bash下的shell
- 編寫shell文件舉例如下:
    ```
        #!/bin/bash
        echo -e "\e[1;34m hello world \e[0m"
    ```
- 編寫好的shell腳本文件必須以.sh作爲文件後綴
4.2 執行shell腳本
- 執行有兩種方式:
    - 方式一:bash 文件
    - 方式二:./文件
        - 注意:方式二執行文件前,必須先讓文件有權限,即:
        ```
            chmod u+x ./文件
            //其中chmod表示change mode

            //也可以使用
            chmod 755 文件
        ```
    - 舉例執行shell文件
        ```
            bash ./test.sh
            //或
            chmod 755 ./test.sh
            ./test.sh
        ```

5. 別名

- 查看所有別名
    ```
        alias
    ```
- 查看指定別名
    ```
        alias ls
    ```
- 設置臨時別名
    ```
        alias yuhua="cd /home/yuhua"
    ```
        - 這樣執行yuhua這個命令就相當於執行"cd /home/yuhua",不過這是臨時的,重啓機子後就沒有了
- 設置永久別名(2步走,第一步寫入,第二部使生效)
    - 需要寫入環境變量配置文件,即~/.bashrc文件
    ```
        su //進入root用戶
        vi ~./bashrc
        //可以在裏面添加別名
        alias yuhua="su yuhua"
    ```
    - 然後使修改後的文件生效,有兩個命令均可使用
        - 方法一:使用source
        ```
            source ~/.bashrc
        ```
        - 方法二:使用點.
        ```
            . ~/.bashrc
        ```
- 刪除臨時別名
    ```
        unalias yuhua
    ```
- 永久刪除別名
    ```
        進入 ~/.bashrc
        然後刪除別名
        然後source ~/.bashrc
    ```
- 當永久別名跟臨時別名是同一個時,臨時別名優先
    - 舉例:
        - 設置了永久別名alias yuhua="echo 1"
        - 也設置了臨時別名alias yuhua="echo 2"
        - 當執行yuhua,會打印出2

6. 命令的生效順序

- 找:絕對路徑或者相對路徑,找不到走下一步
- 找:別名,找不到走下一步
- 找:bash內部命令,找不到走下一步
- 找:按照$PATH環境變量定義的目錄查找順序找到的第一個命令
    - 注意:查看環境變量定義的目錄,使用命令
        ```
            echo $PATH
            //會得到的結果是:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/yuhua/bin
            //該結果代表環境變量定義的目錄,有很多,以:分割
        ```

7. 命令快捷鍵

命令 含義
ctrl+c 強制終止當前命令
ctrl+l 清屏
ctrl+a 光標移動到命令行首
ctrl+e 光標移動到命令行尾
ctrl+u 從光標所在的位置刪除到行首
ctrl+z 把命令放入後臺
fg 把任務帶回前臺
ctrl+r 在歷史命令中搜索
- 注意:在這裏,所謂的把任務放入後臺與帶回前臺指的是:
    - 當我輸入命令,輸完,並不是馬上就執行結束的,可能是等待的過程,也就是當前命令一直在進行中,那麼這時候可以使用ctrl+z把命令帶入後臺執行,這樣你就可以繼續操作了;同樣的,對弈在後臺執行的命令,可以用fg把任務待會前臺,這樣你就不能繼續操作了

8. 歷史命令

- history [選項] [歷史命令保存文件]
    - 選項
        - -c 清空歷史命令
        - -w 把緩存中的歷史命令寫入歷史命令保文件 ~/.bash_history
- 默認保存1000條 /etc/profile HISSIZE=10000

9. 調用

- 使用上下箭頭調用以前的歷史命令
- 使用 !n 重複執行第n條歷史命令
- 使用 !! 重複執行上一條命令
- 使用 !字符 重複執行最後一條以該字符串開頭的命令
    ```
        history -c
        1  echo 1
        2  echo 2
        3  echo 3
        !2
        !!
        !echo
    ```

10. 輸出重定向

10.1 標準輸入輸出
設備 設備文件名 文件描述符 類型
鍵盤 /dev/stdin 0 標準輸入
顯示器 /dev/stdout 1 標準輸出
顯示器 /dev/stderr 2 標準錯誤輸出
類型 符號 作用
標準輸出重定向 命令 > 文件 以覆蓋的方式,把命令的正確輸出輸出到指定的文件或設備當中
標準輸出重定向 命令 >> 文件 以追加的方式,把命令的正確輸出輸出到指定的文件或設備當中
錯誤輸出重定向 命令>文件 以覆蓋的方式,把命令的錯誤輸出輸出到指定的文件或設備當中
錯誤輸出重定向 命令>>文件 以追加的方式,把命令的錯誤輸出輸出到指定的文件或設備當中
正確輸出和錯誤輸出同時保存 命令>文件 2>&1 以覆蓋的方式,把正確輸出和錯誤輸出都保存到同一個文件當中
正確輸出和錯誤輸出同時保存 命令>文件 2>>&1 以追加的方式,把正確輸出和錯誤輸出都保存到同一個文件當中
正確輸出和錯誤輸出同時保存 命令&>文件 以覆蓋的方式,把正確輸出和錯誤輸出都保存到同一個文件當中
正確輸出和錯誤輸出同時保存 命令&>>文件 以追加的方式,把正確輸出和錯誤輸出都保存到同一個文件當中
正確輸出和錯誤輸出同時保存 命令>>文件1 2>文件2 以覆蓋的方式,正確的輸出追加到文件1中,把錯誤輸出追加到文件2中
10.2 輸入重定向
- wc命令的功能爲統計指定文件中的行數、單詞數、字節數(換行回車表示一個字節), 並將統計結果顯示輸出
- 命令 < 文件把文件做爲命令的輸入
- 命令 << 標識符 標識符把標識符之間內容作爲命令的輸入
- wc < access.log 
[root@localhost ~]# wc <<!
> hello world
> !
1  2 12

//這裏的wc << ! 這個!是一個定界符,也就是當你輸入的時候,輸入當!表示結束了
//特別注意:這裏的!是任意取的,你可以寫@,也可以寫EOF,甚至可以寫yuhua

11. 管道符號

11.1 多命令順序執行
多命令執行符 格式 作用 案例
; 命令1;命令2 多個命令執行,命令之間沒有任何邏輯聯繫 echo 1;echo 2;
&& 命令1&&命令2 邏輯與 當命令1正確執行,則命令2纔會執行 當命令1執行不正確,則命令2不會執行 echo 1&&echo 2;
\\ 命令1\\ 命令2 邏輯或 當命令1執行不正確,則命令2纔會執行 當命令1正確執行,則命令2不會執行 echo 1\\echo 2;
   - date;ls;date;ls
   - ls && echo yes || echo no

11.2 管道符
- 命令1的正確輸出會作爲命令2的操作對象
- 命令1|命令2
```
    ls /etc/ | more
    netstat -an | grep ESTABLISHED | wc -l
```
11.3 通配符
- 匹配文件名和目錄
通配符 作用
? 匹配一個任意字符
* 匹配0個或任意字符,也就是可以匹配任意內容
[] 匹配中括號中任意一個字符
[-] 匹配中括號中任意一個字符,-代表範圍
[^] 匹配不是中括號中的一個字符
11.4
符號 作用
‘’ 單引號。在單引號中所有的特殊符號,如$和`都沒有特殊含義
“” 雙引號,在雙引號裏特殊符號都沒有特殊含義,但是 $ ` \ 例外,擁有調用變量值,引用命令和轉義的含義
` 反引號,擴起來的是系統命令
$() 和反引號一樣
# 在shell腳本中,#開頭的行代表註釋
$ 用於調用變量的值
\ 轉義符號
- 這裏的單引號和雙引號類似php
    - 單引號裏如果有變量,不解析
    - 雙引號裏如果有變量,會解析
    - 舉例:
        ```
            name=yuhua
            myname='$name_10'
            echo myname //得到的是$name_10字符串
            myname2="$name-10"
            echo myname2 //得到的是yuhua-10
        ```
- 這裏的反引號代表執行的意思($()與反引號效果一模一樣)
    - 舉例:
        ```
            files="`ls`"
            echo $files //會先得到ls,發現ls是帶反引號的,則執行這個ls,得到的就是執行命令ls的結果
        ```
    -  a=`ls`
    -  b=$(ls)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章