Shell為命令解釋器,把用戶命令解釋為內核可識別的機器語言,然后翻譯命令結果給用戶,其也是一個強大的編程語言,是解釋執行的腳本語言,無編譯,與python機制基本相同。
Shell內部可以直接調用Linux系統命令
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" ] 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"