Linux shell腳本命令彙總(不斷更新)

Shell 是什麼?

  • Shell 指一種應用程序,它提供了一個界面 用戶通過這個界面訪問操作系統內核的服務
  • Shell 腳本(shell script) 用shell 編寫的腳本程序。 shell 通常都是指 shell 腳本
  • Linux的精髓:將多個程序(命令)組裝成大型程序, 而Shell 就是最好粘合劑
  • Shell的優點 簡單、高效、易維護、隨寫隨用
  • Shell 開發流程:需求分析、問題建模、爲代碼流程邏輯、代碼實現與運行、總結
  • 腳本所有種類查看:cat /etc/shells 
  • 正在使用的種類:echo $SHELL
  • 編碼規範:多加註釋說明、命名建議規則:變量名大寫、局部變量小寫、函數名小寫、函數變量 加 local
  • 編輯器 VS Code:宿主機中寫的代碼,同步到虛擬機中,需要設置共享文件夾,配置sftp:查看 -> 命令面板 -> SFTP config

使用:

  • bash頭部默認用bash:#!/bin/bash
  • 註釋:#單行註釋用於行首解釋說明,多行註釋用::<<EOF ...EOF

Shell 基礎語法:

  • 變量:命名只能使用英文字母,數字和下劃線、首個字符不能以數字開頭、中間不能有空格,可以使用下劃線(_)、不能使用bash裏的關鍵字(help命令查看)
  • 變量分類:局部變量、環境變量、特殊變量
  • 局部變量:僅在當前shell實例中有效、在腳本或命令中定義、函數內的變量 加 local
  • 變量的定義和使用:
    #!/bin/bash
    
    # 1. 變量的定義 和使用
    my_name=zhangchulan
    echo "1. $my_name"
    
    # 2. 另一種定義方式
    course="linux start"
    echo 2. ${course}
    
    # 3. 只讀變量, 不加$
    readonly course
    course="linux kernel"
    echo "3. ${course}"
    
    # 4. 刪除變量, 不加$
    unset my_name
    echo  "4. ${my_name}"
    
    
    結果:
    1. zhangchulan
    2. linux start
    2-variable.sh: line 13: course: readonly variabl

基本運算:

  • 算術運算:expr 求值操作、+加、 -減、 *乘、 /除、 % 取餘
    #!/bin/bash
    # 算術基本運算, 加減乘除取餘
    a=11
    b=5
    
    # 加法 expr
    val=`expr $a + $b`
    echo "$a + $b = $val"
    
    # 另一種數值運算 $[var]
    val=$[a-b]
    echo "$a - $b = $val"
    
    結果:
    11 + 5 = 16
    11 - 5 = 6

     

  • 關係運算: -eq 相等、-ne 不相等、-gt 大於、-ge 大於等於、-lt 小於、-le 小於等於
#!/bin/bash
# 關係運算
a=11
b=5

#例子, 其他 ne, gt, ge, lt, le 類似
if [ $a -eq $b ]
then
    echo "$a -eq $b : a 等於 b"
else
    echo "$a -eq $b: a 不等於 b"
fi

結果:
11 -eq 5: a 不等於 b
  • 布爾與邏輯運算:! 非運算 [ ! false ]、-o 或運算、-a 與運算 [ $a -lt 100 -a $b -gt 15 ] 、&& 邏輯與 [[ $a -lt 100 && $b -gt 100 ]] 、|| 邏輯或 、== 相等(數字)、 != 不等(數字)
#!/bin/bash
# 布爾運算
a=11; b=5
#例子, 其他 ne, gt, ge, lt, le 類似
if [ $a -eq $b ]
then
    echo "$a equal $b : a 等於 b"
else
    echo "$a not equal $b: a 不等於 b"
fi

# 邏輯運算 注意 兩個 [[ ]]
if [[ $a -gt 0 && $b -gt 0 ]]
then
    echo "a, b 都大於 0"
fi

結果:
11 not equal 5: a 不等於 b
a, b 都大於 0

 

  • 字符串:單引號:原樣輸出,變量無效;雙引號:可以包含變量
#!/bin/bash
course="Linux入門"

# 單引號
question="Linux 如何入門?$course"
echo $question

# 雙引號
answer="請學習$course:課程!"
echo $answer

# 字符串拼接
echo "拼接後一起輸出:\n"$question"\n"$answer

結果:
Linux 如何入門?Linux入門
請學習Linux入門:課程!
拼接後一起輸出:
Linux 如何入門?Linux入門
請學習Linux入門:課程!
 1 #!/bin/bash
  2 # 字符串長度
  3 str="hello wolrd"
  4 echo "字符串"$str"的長度爲:"${#str}
  5 
  6 # 獲取子串, 從第1個字符開始,截取3個。
  7 echo "字符串"$str"子串:"${str:1:3}
  8 
  9 # 查找子串
 10 matched=`expr index "$str" wo`                                                                                      
 11 echo "字符串" $str "查找wo的位置在" $matched

結果:
字符串hello wolrd的長度爲:11
字符串hello wolrd子串:ell
5
字符串 hello wolrd 查找wo的位置5
  • 字符串運算符:
  1 #!/bin/bash                                                                                                         
  2 # 算術基本運算, 加減乘除取餘
  3 a=11
  4 b=5
  5 
  6 # 加法 expr
  7 val=`expr $a + $b`
  8 echo "$a + $b = $val"
  9 
 10 # 另一種數值運算 $[var]
 11 val=$[a-b]
 12 echo "$a - $b = $val"

結果:
11 + 5 = 16
11 - 5 = 6

 

  • 數組:定義, 下標從 0 開始、設置/讀取、讀取數組所有元素 @、讀取數組長度
  1 #!/bin/bash                                                                                                         
  2 # 1. 數組的定義
  3 arr=(aa bb cc "hello world")
  4 # 2. 設置 元素
  5 arr[2]="222"
  6 # 3. 讀取 元素
  7 echo  "下標爲2的元素:"${arr[2]}
  8 # 4. 讀取 所有元素, 用 @
  9 echo "所有元素:"${arr[@]}
 10 # 5. 獲取數組長度, 用 #
 11 len=${#arr[@]}
 12 echo "數組長度:$len"

結果:
下標爲2的元素:222
所有元素:aa bb 222 hello world
數組長度:4
  • 分支:if else \ case
  1 #!/bin/bash
  2 
  3 age=20
  4 if [ $age -le 10 ] # <=10
  5 then
  6     echo "少年"
  7 elif [ $age -le 20 ] # <=20
  8 then
  9     echo "青年"
 10 elif [ $age -le 50 ] # <=50
 11 then
 12     echo "中年"
 13 else # >50
 14     echo "老年"
 15 fi

結果:
青年

  1 #!/bin/bash                                                                                                         
  2 
  3 status=1
  4 case $status in
  5     0) echo "todo"
  6     ;;
  7     1) echo "doing"
  8     ;;
  9     2) echo "done"
 10     ;;
 11 esac

結果:
doing
  • 循環

  1 #!/bin/bash                                                                                                         
  2 # for 循環輸出 數組內容
  3 arr=(aa bb cc)
  4 for item in ${arr[@]}
  5 do
  6     echo "$item"
  7 done

結果:
aa
bb
cc
  • 函數:function 關鍵字可選、函數後面的 () 可選
  •   1 #!/bin/bash                                                                                                         
      2 #函數的定義和調用
      3 function myfun()
      4 {
      5     echo "這是 shell 函數!"
      6 }
      7 
      8 myfun
    
    結果:
    這是 shell 函數!
    
      1 #!/bin/bash                                                                                                         
      2 #函數傳參 和返回值
      3 function add()
      4 {
      5     local ret=$(($1+$2))
      6     return $ret
      7 }
      8 
      9 add 5 8
     10 echo $?
    
    結果:
    13

    常用命令

  • printf:打印輸出
  • date:查看日期
  • cut: 截取 ,下標從1開始,舉例: echo zhangchulan|cut -c2-3
  • 文本處理三劍客:grep 查找,sed編輯,awk報告
  • random根據date獲取

更多參考:https://wangdoc.com/bash/intro.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章