1. 程式人生 > >linux shell 學習筆記01

linux shell 學習筆記01

進程 $* echo $? swd mil 條件 shel 個數 總結

1、命令歷史記錄history !$ :調用上一條命令的執行結果 !100 :運行history記錄裏的第100條命令 !ser :調用以ser開頭的最後一次執行的命令 ctrl+r :搜索命令的關鍵字 2、bash中的符號: 雙引號"" : 會把引號裏的內容當成一個整體來看待,允許$符號引用其他變量 單引號‘‘ : 會把引號裏的內容當成一個整體來看待,不允許引用其他變量 反撇號`` 和 $() : 作用一樣,反撇號和小括號裏的命令優先執行,區別在於反撇號不能嵌套。 當一個字符串被括在反撇號 ` `中時,該字符串將作為命令被shell解釋執行,即用命令的執行結果替換這個字符串本身。要註意反撇號與單引號的區別。
3、運算符 $(())和$[] :運算符 分號; :可對一行命令進行分割,執行下一個命令時不考慮上一條命令執行的結果是否正確 && :邏輯與 ,可以對一行命令進行分割,執行下一個命令時需要考慮上一條命令執行的結果是否正確 || :邏輯或,只有在 || 左邊的命令返回假,|| 右邊的命令才會被執行。 | :表示管道,上一條命令的輸出,作為下一條命令參數 4、變量的分類 本地變量:當前用戶自定義的變量。只在當前進程中有效,其他進程及當前進程的子進程無效 # a=hello # echo $a hello 環境變量:當前進程有效,同時能夠被子進程調用
查看當前用戶的環境變量env命令 # env|grep HI HISTSIZE=1000 HISTCONTROL=ignoredups # HI=hello # export HI 導出臨時變量到環境變量 # env|grep HI HISTSIZE=1000 HI=hello HISTCONTROL=ignoredups # export HI=world 導出 全局變量:所有的用戶和程序都能使用,且繼承,新建用戶也可以調用 # vim /etc/profile 定義系統全局變量 # . /etc/profile 或者 # source /etc/profile 刷新變量
/etc/bashrc 使用bash shell用戶的環境變量 /etc/profile 使用shell所有用戶的環境變量 局部變量: $home/.bashrc 當前用戶固定的變量,一般該文件定義別名 $home/.bash_profile 當前用戶的環境變量 系統變量:(bash內置的變量) $# : 腳本後參數個數 $* : 腳本後的參數 $@ : 腳本後的參數 $? : 上一條命令執行後的返回狀態;0代表正確執行;非0代表異常或出錯 $$ : 當前所在進程的進程號 $! : 後臺運行的最後一個進程號 $0 : 當前執行的進程或程序名 !! : 調用最後一條命令的歷史 !$ : 調用最後一條歷史命令中的參數 $1~$9 : 位置參數變量 ${10}~${n} :擴展的位置參數變量 6、簡單的四則運算: + - * / %(取余) $(()) | $[] |expr |let 7、read 交互式定義變量 -p :提示信息 -n :字符數 -s :不顯示 -t :超時時間 # read -p "Input your name:" username Input your name:mor # echo $username mor # read -s -p "Input your password:" pass Input your password: # echo $pass 123456 8、取消變量: unset 變量名 9、帶有浮點的計算: # bc # echo 3.5+4|bc 7.5 man test 與文件是否存在有關的判斷: -e :是否存在,不管是什麽類型,只要存在條件就為真 -f :是否為普通文件 -d :是否為目錄 -S :是否為socket文件 -p :是否為管道文件 -c :是否為字符設備 -b :是否為塊設備 -l :是否為鏈接文件 與文件權限相關的判斷 -r :是否可讀 -w :是否可寫 -x :是否可執行 -u :判斷是否有suid(特殊權限|上方寶劍) -g :判斷是否有sgid(特殊權限|強制繼承家族企業) -k :判斷是否有t位(特殊權限|只能自己管理自己) -s :判斷是否為空文件 -s表示非空文件 !-s表示空文件 兩個文件比較判斷 file1 -nt file2 :比較file1文件是否比file2文件新 file1 -ot file2 :比較file1文件是否比file2文件舊 file1 -ef file2 :比較file1和file2是否為同一個文件,是否指向同一個inode號 整數之間的判斷 -eq :相等 -ne :不相等 -gt :大於 -lt :小於 -ge :大於等於 -le :小於等於 字符串之間的判斷 -z :是否為空字符串,字符長度為0,為真 -n :是否為非空字符串 string1 = string2 :兩個字符串是否相等 string1 != string2 :兩個字符串不相等 ! :結果取反 多重條件判斷 邏輯判斷符號: -a 和 && (and 邏輯與)[ 條件1 -a 條件2 ] 只有兩個條件都成立,才為真 -o 和 || (or 邏輯或)[ 條件1 -o 條件2 ] 只要有一個條件成立,就為真 !:邏輯非(優先級最低) -a邏輯與比-o邏輯或優先級高 demo1:判斷一個IP是否能ping通 總結: echo $? ——>結果 0:代表正確執行 127:沒有發現命令 126:有命令,但是無法執行,權限不夠 1或者2:沒有文件或者目錄 文本處理 1.1 grep工具:行過濾 參數: -c :統計搜索到的關鍵字的次數 -i :忽略大小寫 -n :輸出行號 -v :取反 ^ :以什麽開頭 $ :以什麽結尾 --color=auto :顏色區分關鍵字 -A :搜索關鍵字的後幾行 -B :搜索關鍵字的前幾行 -C :搜索關鍵字的前後幾行 1.2 cut工具:列過濾 參數: -c :以字符為單位進行分割 -d :自定義分割符,默認是tab(制表符) -f :與-d一起使用,顯示範圍 # cut -d: -f 1 /etc/passwd # cut -c2-10 /etc/passwd # cut -c2- /etc/passwd 從第2個字符一直往後顯示 # cut -c2 /etc/passwd 只顯示第2個字符 1.3 sort工具:排序 參數: -u :去除重復行 -r :將序排列,默認是升序 -o :將排序的結果輸出到文件 -t :定義分割符 -k :與-t一起使用,定義範圍 -n :以數字排序 # cat /etc/passwd|sort -t: -k 3 -n -r # sort -t: -k 3 -n -r /etc/passwd # sort -t: -k 3 -n -r /etc/passwd -o 123 # sort -u -n test.txt # sort -n test.txt |uniq

1.4 uniq命令用於報告或忽略文件中的重復行,一般與sort命令結合使用。

參數:
-c或——count :在每列旁邊顯示該行重復出現的次數;
-d或--repeated:僅顯示重復出現的行列;
-u或——unique:僅顯示出一次的行列;
-f<欄位>或--skip-fields=<欄位>:忽略比較指定的欄位;
-s<字符位置>或--skip-chars=<字符位置> :忽略比較指定的字符;
-w<字符位置>或--check-chars=<字符位置>:指定要比較的字符

刪除重復行:
# uniq file.txt
# sort file.txt | uniq
# sort -u file.txt
# sort file.txt | uniq -c 統計各行在文件中出現的次數:
# sort file.txt | uniq -d 在文件中找出重復的行:


1.5 wc工具:統計行、單詞、字符 # wc -l /etc/passwd 35 /etc/passwd # wc -w /var/log/messages 2927 /var/log/messages # wc -c /var/log/messages 21784 /var/log/messages

linux shell 學習筆記01