腳本相關

  • 變量
    • echo $name 與 echo “$name” 假如變量是讀取文件,前者會自動縮進成一行,后者保留原有格式
    • (umask=022,mkdir /f1)括號相當于開啟一個臨時子進程,能讀取當前shall的變量等信息,但是進程號不變,命令結束后恢復剛才狀態
    • 局部變量,環境變量,只讀變量(常量),位置變量,數組
      • 局部變量:只在當前shall有效
      • 環境變量:可以傳給子進程。
        • 設置環境變量 export 變量名 decler -x 變量名
        • 查看環境變量 export env decler -x
      • 只讀變量(常量):不可更改的變量
        • 設置 decler -r 變量名 readonly 變量名
      • 位置變量
        • $n 第n個參數 ,$*所有參數當成一個字符串,$@所有參數分開傳輸,$#參數個數
        • $0文件名加路徑 若程序建立軟連接,使用軟連接$0顯示的是軟連接路徑和名字
        • $10 不是變量10,而是變量1加上0,如果想表示變量10要用{}括起來,${10}
        • set — 清除位置變量參數
        • shift 參數左移,默認是1,可以指定
      • 數組:存儲多個元素的連接的內存空間
        • 組成數組名和索引(默認從0開始,也可以自定義。bash4.0以前的版本不支持自定義數組)
        • 申明數組:declare -a 通常意義的數組 -A 指關聯數組
        • 數組的賦值
          • 一次只賦值一個 name[index]=value
          • 一次賦值全部 name=(value1 value2…)
          • 只賦值特定值 name=([0]=value1 [1]=value2)
          • read -a
        • 引用數組:
          • 所有元素
            • ${#name[*]]} 數組name中的參數個數
            • ${name[@ | *]} 引用所有參數
            • ${!typenum[@]}數組成員
              腳本相關
          • 數組切片
            • ${name[@]:offset:number} offset要跳過的參數 number要取出的參數
      • bash內置字符串處理
        • 字符串切片
          • ${var:offset:number}
            • var=1234 ${var:1:2} =23
          • ${var: -n} 取字符串最右側的幾個字符 :-n前面一定要有空格
            • v=1234 ${var: -2} =34
        • 基于模式取字段
          • ${var#*word} 從左往右刪除第一個word以前的字符串
          • ${var##*word} 從左往右刪除最后一個word以前的字符串
          • ${var%word*} 從右往左刪除第一個word以前的字符串
          • ${var%%word*} 從右往左刪除最后一個word以前的字符串
        • 查找替換
          • ${var/a/b} 查找var中的a找到第一個后替換成b
          • ${var//a/b} 查找var中的a后全部替換成b
          • ${var/ # a/b} 查找var中的以行首的a找到第一個后替換成b
          • ${var/ %a/b} 查找var中的以行尾的a找到第一個后替換成b
        • 刪除
          • ${var/a/} 刪除var中的第一個a
        • 大小寫轉換
          • ${var^^} 把所有字符轉為大寫
          • ${var,,} 把所有字符轉為小寫
        • 變量臨時賦值
          • ${var:-a} 如果var沒有值,則給var臨時賦值為a;如果var值則返回原來值
          • ${var:=a} 如果var沒有值,則給var賦值為a;如果var值則返回原來值
          • ${var:+a} 如果var有值,則給var臨時賦值為a;沒有值則不賦值
    • 為腳本使用配置文件
      • 在腳本中使用. filename 或者source filename
  • 算術運算
    • x=10 y=20 let z=x+y ;let z++ 先處理z再加1,let ++z,先加1在處理z;let z+=1 為z+1
    • z=$[x+y] ; z=((x+y))
    • a=100 b=110 a^b=010
      • a與b的值互換 a=[a^b], b=[a^b] a=[a^b]
  • 短路與與短路或 cmd1 && cmd2 || cmd3
    • 假如cmd1成功執行cmd2,不執行cmd3,;否則相反
    • cmd1 || cmd2 && cmd3 無論cmd1是否正常,cmd3都會執行
  • 條件判斷
    • test 【】
      • [[ == ]] 支持通配符 [[ =~ ]] 支持正則
    • -a并且 -o或 -z為空 -s文件存在且非空 -e文件存在(所有文件類型包括目錄) -f普通文件
    • eq等于;ne不等于;lt小于;le小于等于;gt大于;ge大于等于
  • 統配符
    腳本相關
  • read 讀取輸入并賦值
    • – p輸入提示 -t規定結束時間 -s靜默,不顯示輸入內容
    • 批量賦值
      • read a s d >>> x y z read a s d < f1 參數要在一行
  • if 語句
    • 單分支 : if 條件 ;then ; fi
    • 雙分支: if 條件 ; then ; else ; if
    • 多分支:
      腳本相關
  • 循環
    • while [ true ] ;do ;done?[ ]進行條件判讀成立進入循環,不成立則退出循環
    • until [ false ] ;do ;done?與while相反,不成立進入循環,成立退出循環
      • 特殊格式
        • while read var ;do ;done </etc/passwd var等于讀取行的變量
    • for var in {} ;do ;done?{}是變量var的取值范圍
      • 特殊格式 for ((控制變量初始化;條件判斷;控制變量修正)) ;do ;done
        • declare -i sum=0 for ((i=1;i<=100;i++));do let sum+=$i ;done
    • 循環控制語句
      • continue 【n】跳過循環 break 【n】 中斷循環
        • continue 例子
          腳本相關
          • 除了5不打印都打印
        • 腳本相關
          • 打印3遍1到4。
      • case
        腳本相關
      • select循環與菜單
        • select 變量 in values;do ;done
          • 用戶輸入參數在內置變量REPLY中 ;請求輸入的提示符修改PS3;死循環和case組合
          • 腳本相關
      • 多參數處理時偏移參數
        • 腳本相關
      • 并行處理
        • 腳本相關
      • 信號捕捉trap
        • trap ‘ ‘ 忽略信號 ;’-‘恢復信號;-p列出自定義信號
    • 函數:過程式編程,代碼重用 ,以實現結構化編碼或模塊化編碼
      • 語法
        • 1 fuction f_name { 代碼 }
        • 2 f_name() { 代碼 }
      • 函數的生命周期調用時創建,返回時終止:return命令自定義狀態結果 0成功,return定于后面的命令不再執行。
      • 函數中變量如果和本地變量一樣,在函數中重新申明的話不會影響本地變量;不申明的話函數中變量運算會影響本地變量。
    • 函數遞歸:函數直接或者間接調用自身
      • fact () {
        • if [$1 -eq 0 -o $1 -eq 1]; then
          • echo 1
        • else
          • echo $[$1*$(fact $[$1-1])
        • fi
  • ezpect 在腳本中自動與交互命令交互(基于tcl要確認安裝)
    • 確認程序是否安裝which tcl
    • 語法及命令:
      • spawn:啟動的新進程;interact:允許交互;exp_continue:匹配多個字符后加此命令
      • send:像進程發送的字符串;expect:從進程接受到的字符串
        • 單分支: expect “hi”{send “good\n”} 匹配到hi的時候輸入
        • 多分支:expect “hi”{send “good\n”}\
          • ”hehe“ {send “good\n”}
          • 腳本相關
        • eval 掃描命令進行置換
          • cs=whoami ; eaval $csroot

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/98471

(0)
阿飛阿飛
上一篇 2018-05-14
下一篇 2018-05-14

相關推薦

欧美性久久久久