Linux命令行和shell編程


Shell

  • Shell是一個程序,用戶輸入的命令通過shell來傳達給內核或其它程序。用戶在linux打開一個終端,終端就會自動調用用戶的shell.
  • Linux上的Shell有很多種,用的最多是shell是bash, 全路徑是 /bin/bash. 每個用戶的shell可以不一樣,具體配置放在 /etc/passwd文件種。

Bash

  • echo $PATH 顯示linux的環境變量,$用來引用一個變量,bash執行命令的時候就是去PATH指定的路徑種尋找的。
  • export test="hello world" 使用export聲明一個變量。
  • 按一次TAB鍵會嘗試補全命令,連按兩次TAB鍵則會列出所有相關的命令。
  • history 20 列出最近執行過的20條命令。

常見目錄

  • /usr 存放從軟件源中安裝的軟件
  • /usr/local 存放其它地方安裝的軟件。
  • /bin , /usr/bin , /usr/local/bin 存放普通用戶可以執行的程序或命令。
  • /sbin, /usr/sbin, /usr/local/sbin 存放root用戶可以執行的程序和命令。
  • /home 用戶家目錄的根目錄
  • ~ 用戶家目錄
  • ./tmp 當前目錄下的tmp目錄。 點表示當前目錄。

幫助命令

  • man ls
  • more ls 可以通過enter鍵向下翻頁,翻到最后一頁自動退出。
  • less ls 可以上下翻頁。
  • 以上命令可通過按q 鍵退出。

管道符

ps -A|more ps命令的輸出作為more命令的輸入。

通配符

  • Linux的通配符一般都由bash來處理。
  • 例如 cp *.jpg ./tmp 則bash會先將*.jpg 解析成a.jpg b.jpg ... 然后再傳給 cp來處理。
  • cp \*.jpg ./tmp 文件名本身是 *.jpg 則要使用轉義符 \。
  • * 代表任意多個任意的字符, ? 代表任意一個字符。

常用命令

  • hostname 顯示主機名
  • uname 顯示當前操作系統信息
  • firefox & 啟動火狐瀏覽器,並讓火狐在后台運行,不影響當前命令行環境。任何命令后跟 & 就表示該命令在后台運行。
  • ctrl + c 會終止當前正在運行的命令。
  • 什么也不輸入的情況下連按兩個tab鍵會列出目前系統所有的命令。
  • 歷史命令:history 查看執行過的命令; !! 執行前一個命令;!un 執行前面執行過的以un開頭的命令; !num 執行history列出的第num個命令;!?ea 執行前面執行過的包含ea的命令;!-n 執行n個命令之前的那個命令。 ctrl + r 可以搜索歷史命令,搜索條件為歷史命令中包含的任意字符串。 按Esc后按點鍵,會列出上一個命令的參數。
  • id 顯示當前用戶信息。
  • passwd 修改當前用戶密碼。
  • su - 切換到root用戶並使用新的shell環境,su 切換到root用戶但是不創建新的shell環境。
  • 暫停某個程序:ctrl + z 或者發送信號17
  • 查看后台進程: jobs
  • 暫停進程500秒:sleep 500
  • 繼續運行暫停的后台進程: bg 2
  • 繼續在前台運行暫停的進程 fg 2

常用命令進階

  • 日期時間:date 查看設置當前系統時間, date -u 顯示 UTC時間,date %Y--%m--%d 格式化顯示為:2017--10--05, date -s '20:20:30' 設置時間。
  • 顯示硬件時鍾時間,就是主板上記錄的時間: hwclockclock
  • 查看日歷: cal
  • 查看系統運行時間: uptime
  • 顯示輸入的內容: echo aaa 顯示 aaa
  • 查看純文本文檔的內容: cat txt1
  • head -20 txt1 顯示 txt1文件的前20行內容
  • tail -20 -f log1 顯示log1的最后20行內容,並追蹤文件的更新,該命令用來查看日志非常方便。
  • more txt1 翻頁顯示文件內容,只能向下翻頁。空格鍵翻頁。
  • less txt1 翻頁顯示文件內容,可上下翻頁。page down , page up 上下翻頁。
  • lspci 查看PCI設備
  • lsusb 查看USB設備
  • lsmod 查看加載的模塊,linux中的模塊一般指驅動。
  • shutdown , -h 關機, -r 重啟。 shutdown -h now 立即關機; shutdown -h +10 10分鍾后關機;shutdown -h 23:10 23:10關機;shutdown -r now 立即重啟。
  • poweroff 立即關機。
  • reboot 立即重啟。
  • 壓縮:zip命令 zip zip1.zip file1 ,gzip命令 gzip linuxcast.net
  • 解壓縮: unzip zip1.zip
  • 打包歸檔文件,即把多個文件打包成一個文件:tar -cvf out.tar /dir1 將/dir1文件夾歸檔成out.tar; tar -xvf out.tar 將out.tar 抽出出來,是歸檔的反操作;tar -cvzf back.tar.gz /etc 將 /etc 歸檔並壓縮成back.tar.gz
  • 查找文件: locate zy1 快速查找名為zy1的文件或文件夾,locate 是從數據庫查找,所以速度快,數據庫默認一天一更新,所以新加的文件可能找不到,可通過 updatedb 手工創建或更新數據庫。
  • 高級查找文件,文件夾:find 命令,根據指定位置查找,保證實時性,速度較慢,
    find . -name *zy* 在當前位置查找文件名包含zy的文件;find / -perm 777 在根目錄下查找所有權限為777的文件; find / -type d 返回所有目錄類型的文件;find . -name "zy*" -exec ls -l {} \; 將查找的結果作為參數傳給 exec 和 {}; 之間的命令,大括號和反斜線之間有個空格。

Shell編程

示例腳本1 各種變量,輸出語句。

執行結果:

說明如下:

  • 用戶變量不用聲明,隨用隨寫,如上面的userVar1, userVar2 ,用戶變量也可用${varName} 來引用

  • 環境變量可以隨時用,如上面的 HOME

  • 全局變量用 export 關鍵字聲明,在當前會話結束后失效。

  • 一些特殊符號變量:
    -- $n 外部傳入的第n個變量,n為0到9,0代表本腳本的名稱。
    -- $* 代表外部傳入的所有變量,不包括第0個變量。
    -- $# 外部傳入的變量的個數。
    -- $$ 當前執行腳本的PID。

  • 反引號中間的命令會被執行后輸出,如上面的 date +%Y%m%d

  • shell的變量只有一種類型:字符串,所以要進行算術計算,需要用到expr命令:

expr 后面的都是參數,所以需要有空格,變量不需要空格。

腳本2 函數和if語句

  • shell 腳本的注釋用 #開頭,但是如果是 #后緊接着一個感嘆號,並且位於文件的第一行,那就不是注釋了,是用來說明執行這個腳本需要哪個shell。

  • shell中調用函數不要加括號,直接寫名稱即可。

  • 左中括號 [ 是一個命令! 位於 /usr/bin 下,用來判斷后面表達式的真假。 后面的都是參數,而且最后一個參數必須是右中括號。因為后面的都是參數,所以參數之間要有空格。

  • if 后面也可以跟命令,比如 if ls -l /home; then

  • 文件判斷參數
    -- -d $path 判斷目錄是否存在。
    -- -f $file 判斷文件是否存在
    -- -e $pathname 判斷文件或目錄是否存在。

  • 算術比較運算,比較的是數值。
    -- $num1 -eq $num2 判斷連個數是否相等。
    -- -ne 判斷不等。
    -- -lt 判斷小於。
    -- -le 判斷小於等於。
    -- -gt 判斷大於。
    -- -ge 判斷大於等於。

  • 字符串比較
    -- $str1 = $str2 兩個字符串是否相等。
    -- $str1 != $str2 兩個字符串是否不等。
    -- -z str1 字符串長度是否為0
    -- -n str1 字符串長度是否不為0.

示例腳本3 case 語句

  • 語法: case .. in 1) .. ;; 2) .. ;; *) ...;; esac.
  • 每個case 的最后一行代碼且只有最后一行代碼要加兩個分號表示結束。

  • for 語句有兩種寫法,見上圖。
  • in 后面是一個列表
  • 如果是第二中寫法,要用兩個小括號。
  • break , continue 和普通編程語言的一樣。

while 語句

while 循環調節
do
code ....
done


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM