Liunx的 Shell 理解和使用
Shell為命令直譯器,把使用者命令解釋為核心可識別的機器語言,然後翻譯命令結果給使用者,其也是一個強大的程式語言,是解釋執行的指令碼語言,無編譯,與python機制基本相同。
Shell內部可以直接呼叫Lix系統命令
echo命令的基本使用:
【echo “內容“ 】輸出命令
【echo -e “內容“ 】輸出,並支援轉義字元
轉義符:
【\t】製表符,tab鍵
【\a】警告音,
【\b】退格,刪除左邊一個字元、
【\c】取消最後的換行,與-n效果一致、
【\f】換頁符,橫向佔位
【\v】與上相同
【\n】換行
【\r】回車,游標回到行首
【 \\】
【echo -e "\e[1;31m 輸出內容 \e[0m"】紅色輸出abd
其中:【\e[1;】表示開始標誌,【[0m】為結束標誌,【31m】表示顏色,可有(黑色 30m)(紅色 31m)(綠色 32m)(黃色 33m)(藍色 34m)(洋紅 35m)(青色 36m)(白色 37m)
輸入輸出重定向:
標準輸入:鍵盤(/dev/stdin)
標準輸出:顯示器(/dev/stdout)
標準錯誤輸出:顯示器(/dev/stdout)
輸出重定向:
【命令 > 檔案】以覆蓋的方式把正確輸出重定向到檔案中
【命令 >> 檔案】以追加的方式把正確的輸出重定向到檔案中
【命令 2> 檔案】標準錯誤輸出重定向,覆蓋
【命令 2>> 檔案】標準錯誤輸出重定向,追加
【命令 >>正確檔案 2>>錯誤檔案】對命令判斷,分別儲存命令結果
多命令順序執行:
【命令1; 命令2;命令3】執行命令1到3,錯誤不影響下一個命令執行
【命令1 && 命令2 && 命令3】前面的命令必須正確執行,才能執行後面的命令
【命令1 || 命令2】命令1正確執行,就不會執行命令2,命令1錯誤時才會執行命令2
【命令 && echo yes || echo no】判斷命令是否正確執行
【命令1 | 命令2】命令1的正確輸出作為命令2的操作物件,管道符
如:【ls -lh /usr/bin | grep -i --color=auto pip3】檢視pip3的執行檔案
萬用字元:
匹配檔名,對於命令:ls 、find、cp
【?】匹配任意一個字元
【*】匹配任意0個或多個字元,如【rm -r *】刪除目錄下所有檔案和資料夾
【[字元1字元2字元3]】匹配字元1到字元3的其中一個字元
【[a-z]】表示匹配小寫字母a到z的任意一個字元
【[^123]】表示不匹配括號內的字元
匹配字串,對於命令:grep、awk、sed
基本支援標準的正則表示式
特殊:
【\{n,m\}】n到m次,需要加斜線
Shell中無【()】、【+】、【?】
特殊字元:
【‘內容’】單引號的內容僅僅表示字串
【“內容”】雙引號的內容會解釋特殊符號,如(\)轉義、($)呼叫變數、(`)反引號等
【`命令`】反引號,內容為引用的命令,可用【$(命令)】代替
【#】表示註釋當前行之後的內容
【$變數】引用變數的值時
變數:
變數的值全部以字串儲存
【set】檢視系統所有變數
【unset 變數名】刪除變數
使用者自定義變數
本地變數,只在當前shell中生效
宣告:namex=”wo sh”
呼叫:$namex
追加:namex=“$namex”” dongxiaodong” 或者 namex=${namex}” dongxiaodong”
環境變數
父子shell的共享變數
【pstree】檢視當前所屬shell位置
通過ssh連線的客戶端有3個,其中1是root,2是當前普通使用者,3是另一個普通使用者
【export 變數名="初始值"】定義環境變數
【bash】進入子shell,可直接訪問環境變數,可用【exit】返回上一級
【env】檢視所有環境變數
【unset 變數名】刪除變數
位置引數變數:
【$n】n可為[0,9],超過時可用{ },${100}
#!/bin/bash #接收第0個引數 echo "當前程式為:$0" #接收第一個和第二個引數 n1=$1 n2=$2 echo "結果為:"$(( $n1 * $n2 ))
【$*】將輸入的所有內容看出一個字串,不包括$0
【$@】把輸入引數分開,相對於把$n內容存放在數組裡,不包括$0
【$#】檢視輸入引數的個數,不包括$0
系統預定義變數:
【$?】輸出上一次命令是否正確執行,0為正確,其他為錯誤碼
鍵盤輸入:
【read 選項 變數名】把輸入的內容存入到變數中
選項有:
(-t) 等待輸入時間
(-n) 指定輸入的字元個數,字元達到數量時會自動確定
(-p) 輸入提示資訊
(-s) 隱藏輸入,如輸入密碼
判斷條件:
【[ -e 檔名 ]】判斷檔案是否存在
【[ -d 目錄名 ]】判斷目錄是否存在
【[ -f 檔名 ]】判斷是否為普通檔案
【[ 整數1 -eq 整數2]】判斷相等,相等返回真
【[ 整數1 -ne 整數2]】判斷不相等
【[ 整數1 -gt 整數2]】判斷整數1是否大於整數2
【[ 整數1 -lt 整數2]】判斷整數1是否小於整數2
【[ 整數1 -ge 整數2]】判斷整數1是否大於等於整數2
【[ 整數1 -le 整數2]】判斷整數1是否小於等於整數2
【[ -z 字串 ]】判斷字串是否為空,空返回真
【[ -n 字串 ]】判斷字串是否非空,非空返真
【[ 字串1 == 字串2 ]】判斷字串是否相等,相等為真
【[ 字串1 != 字串2 ]】判斷字串是否不相等,不相等為真
【[ 判斷1 -a 判斷2 ]】-a表示與,-o表示或,!表示取反
Shell程式碼程式設計:
Shell指令碼執行:【bash 指令碼名】或者:【chmod 700 指令碼名】【./指令碼名】
簡單的 if 比較:
1 #!/bin/bash 2 3 if [ "3" == "2" ] 4then 5echo "輸出:相等" 6#執行系統命令 7ls -lh 8 9 elif [ 4 -eq 4 ] 10then 11echo "4等於4" 12 else 13echo "輸出:不相等" 14#執行系統命令 15pwd 16 17 fi 18 19 #退出shell,並修改 $? 的值為2 20 exit 2
簡單的 case 程式設計:
1 #!/bin/bash 2 3 #鍵盤輸入 4 read -t 30 -p "entry:" nox 5 case "$nox" in 6"1") 7echo "11111111111" 8;; 9"2") 10echo "2222222222222" 11;; 12*) 13echo "xxxxxxxxxxxxxxxx" 14;; 15 esac
簡單的 for 迴圈:
1 #!/bin/bash 2 3 for i in 1 2 5 5 8 4do 5echo $i 6done
or
1 #!/bin/bash 2 #1到100相加程式 3 s=0 4 for ((i= 1;i<=100;i=i+1)) 5do 6s=$(($s+$i)) 7done 8 echo "1+2+3+........+100= $s"
簡單的while迴圈
另外until迴圈的判斷條件是假就繼續迴圈
1 #!/bin/bash 2 3 i=1 4 s=0 5 while [ $i -le 100 ] 6do 7s=$(( $i+$s )) 8i=$(( $i+1)) 9done 10 echo "1+2+3+.....+100= $s"