Linux的 Shell 理解和使用

Shell爲命令解釋器,把用戶命令解釋爲內核可識別的機器語言,而後翻譯命令結果給用戶,其也是一個強大的編程語言,是解釋執行的腳本語言,無編譯,與python機制基本相同。python

Shell內部能夠直接調用Linux系統命令正則表達式

 

echo命令的基本使用

【echo 「內容「 】輸出命令shell

【echo -e 「內容「 】輸出,並支持轉義字符編程

轉義符:數組

【\t】製表符,tab鍵bash

【\a】警告音,ssh

【\b】退格,刪除左邊一個字符、編程語言

【\c】取消最後的換行,與-n效果一致、spa

【\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" ]  4  then  5       echo "輸出:相等"
 6       #執行系統命令
 7       ls -lh  8 
 9 elif [ 4 -eq 4 ] 10  then 11       echo "4等於4"
12 else
13       echo "輸出:不相等"
14       #執行系統命令
15  pwd 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")  7        echo "11111111111"
 8  ;;  9     "2") 10        echo "2222222222222"
11  ;; 12      *) 13         echo "xxxxxxxxxxxxxxxx"
14  ;; 15 esac

簡單的 for 循環:

1 #!/bin/bash
2 
3 for i in 1 2 5 5 8
4  do 5  echo $i 6    done

or

1 #!/bin/bash
2 #1到100相加程序
3 s=0 4 for ((i= 1;i<=100;i=i+1)) 5  do 6      s=$(($s+$i)) 7  done 8 echo "1+2+3+........+100= $s"

簡單的while循環

另外until循環的判斷條件是假就繼續循環

 1 #!/bin/bash
 2 
 3 i=1
 4 s=0  5 while [ $i -le 100 ]  6  do  7     s=$(( $i+$s ))  8     i=$(( $i+1))  9  done 10 echo "1+2+3+.....+100= $s"
相關文章
相關標籤/搜索