linux shell 學習筆記01
阿新 • • 發佈:2018-12-31
進程 $* 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.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
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