標籤:bash shell
bash shell用法小記
shell的使用博大精深,,本人梳理基礎知識,整理一下簡單的用法,具體的請因需求自行研究。
1. 計算# echo $((1+2))3# echo $((1+2+3))6# echo 3+2+5 |bc102. if的用法if [ $i -eq 0 ]; then xxxelse xxxfi整數比較:-eq 等於,如:if [ "$a" -eq "$b" ] -ne 不等於,如:if [ "$a" -ne "$b" ] -gt 大於,如:if [ "$a" -gt "$b" ] -ge 大於等於,如:if [ "$a" -ge "$b" ] -lt 小於,如:if [ "$a" -lt "$b" ] -le 小於等於,如:if [ "$a" -le "$b" ] < 小於(需要雙括弧),如:(("$a" < "$b")) <= 小於等於(需要雙括弧),如:(("$a" <= "$b")) > 大於(需要雙括弧),如:(("$a" > "$b")) >= 大於等於(需要雙括弧),如:(("$a" >= "$b")) 字串比較:通常是這樣做的:if [ X"$test" = X"test" ]= 等於,如:if [ "$a" = "$b" ] -d 目錄-e 存在-f 檔案-n 非Null 字元串-z Null 字元串 3. for的用法array1=("d.com" "e.com" "f.com")len=${#array1[@]}for ((i=0;i<$len;i++))do echo ${array1[$i]}donefor a in $(seq 1 100);do echo $a sleep 1sdone4. case的用法case $1 in start|stop|reload) $1 ;; *) echo "Usage: $0 [start|stop|reload]" ;;esac5. while的用法while truedo echo "abc" read -p "請輸入: " abc ddd="$abc" if [ ${#ddd} -ne 5 ]; then echo "請重新輸入!!!" else break fidone6. 參數## $0 是這個bash檔案的名稱;# $? 是上一指令的傳回值;# $* 是該指令碼調用的所有參數;# [email protected] 基本與上面的$*相同。區別是:# $* 返回的是一個字串,字串中用空格分隔開,而 [email protected] 則返回多個字串;# $# 是所有位置參數的個數;##ab=($(ls))echo "1: "${ab[@]}echo "2: "${#ab[@]}echo "3: "[email protected]echo "4: "$#echo "5: "$?7. 正則 Regex匹配"=~" [[ $XX =~ ^$XXX ]] The =~ Regular Expression matching operator within a double brackets test expression.$ [[ "# test2" =~ ^# ]] && echo yes || echo noyes8. 截取字串假設有:f="/a/b/c/d/e.name.ext"則:# basename $fe.name.ext# dirname $f /a/b/c/d特殊用法:利用${}中的#,%,*來輸出指定的內容1)去掉第一個/,以及左邊的字串 # echo ${f#*/}a/b/c/d/e.name.ext2)去掉最後1個/,以及左邊的字串# echo ${f##*/}e.name.ext3)去掉最後一個/,以及右邊的字串# echo ${f%/*} /a/b/c/d4)去掉第一個/,以及右邊的字串# echo ${f%%/*} (空)上面,是根據“/”來做分割,也可以用“."來分隔,不妨一試。# echo ${f#*.} name.ext# echo ${f##*.}ext# echo ${f%.*} /a/b/c/d/e.name# echo ${f%%.*}/a/b/c/d/e9. 指令碼放入後台,輸出到日誌sh test.sh >1.log 2>&1 &sh test.sh >/dev/null 2>&1 &這裡需要理解幾個小東西的作用:/dev/null 理解成空裝置,這是一個特殊的檔案,這裡的作用是丟棄輸出的內容2>&1 0 輸入 1 輸出 2 錯誤 這裡是將2重新導向到1& 將test.sh放入後台執行,請思考,還有其他的什麼方式也可以將程式放入後台?10. 管道通過“|” 把輸出匯入到另一個程式的輸入中去處理,例如:echo ‘abc, def‘ |cut -d ‘,‘ -f 111. 命令跟蹤調試sh -x test.sh12. 快速鍵Ctrl + a 切換到命令列開始Ctrl + b - Move back a charCtrl + c 終止命令Ctrl + d 退出shell,logoutCtrl + e 切換到命令列末尾Ctrl + l 清除螢幕內容Ctrl + k 剪下清除游標之後的內容ctrl + q 恢複刷屏Ctrl + r 在曆史命令中尋找ctrl + s 可用來停留在當前Ctrl + u 清除剪下游標之前的內容Ctrl + y 粘貼剛才所刪除的字元Ctrl + z 轉入後台運行!! 重複執行最後一條命令↑(Ctrl+p) 顯示上一條命令↓(Ctrl+n) 顯示下一條命令!$ 顯示系統最近的一條參數13. shell傳遞中文到python出現異常export LANG="en_US.UTF-8";/usr/local/bin/python3 xxx.py
bash shell用法小記